Merge pull request #3084

5f5a51a6 util: warn if unbound was not built with threads (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2018-01-25 16:56:27 -08:00
commit 700b3193f8
No known key found for this signature in database
GPG key ID: 55432DF31CCD4FCD

View file

@ -34,6 +34,8 @@
#include <gnu/libc-version.h> #include <gnu/libc-version.h>
#endif #endif
#include "unbound.h"
#include "include_base_utils.h" #include "include_base_utils.h"
#include "file_io_utils.h" #include "file_io_utils.h"
#include "wipeable_string.h" #include "wipeable_string.h"
@ -514,6 +516,18 @@ std::string get_nix_version_display_string()
return std::error_code(code, std::system_category()); return std::error_code(code, std::system_category());
} }
static bool unbound_built_with_threads()
{
ub_ctx *ctx = ub_ctx_create();
if (!ctx) return false; // cheat a bit, should not happen unless OOM
ub_ctx_zone_add(ctx, "monero", "unbound"); // this calls ub_ctx_finalize first, then errors out with UB_SYNTAX
// if no threads, bails out early with UB_NOERROR, otherwise fails with UB_AFTERFINAL id already finalized
bool with_threads = ub_ctx_async(ctx, 1) != 0; // UB_AFTERFINAL is not defined in public headers, check any error
ub_ctx_delete(ctx);
MINFO("libunbound was built " << (with_threads ? "with" : "without") << " threads");
return with_threads;
}
bool sanitize_locale() bool sanitize_locale()
{ {
// boost::filesystem throws for "invalid" locales, such as en_US.UTF-8, or kjsdkfs, // boost::filesystem throws for "invalid" locales, such as en_US.UTF-8, or kjsdkfs,
@ -556,6 +570,9 @@ std::string get_nix_version_display_string()
OPENSSL_init_ssl(0, NULL); OPENSSL_init_ssl(0, NULL);
#endif #endif
if (!unbound_built_with_threads())
MCLOG_RED(el::Level::Warning, "global", "libunbound was not built with threads enabled - crashes may occur");
return true; return true;
} }
void set_strict_default_file_permissions(bool strict) void set_strict_default_file_permissions(bool strict)