diff options
author | John Newbery <john@johnnewbery.com> | 2017-04-10 10:34:23 -0400 |
---|---|---|
committer | John Newbery <john@johnnewbery.com> | 2017-04-10 17:05:59 -0400 |
commit | 7fd50c3b70397c0dc39093a7a4ddbf9b36a615cf (patch) | |
tree | 3e1e6f4962e68412de4bcb64b0c0755c6ed13acf /src/rpc | |
parent | 5255aca3f42e44eb02751299e84e2cf122ed9b49 (diff) |
allow libevent logging to be updated during runtime
Diffstat (limited to 'src/rpc')
-rw-r--r-- | src/rpc/misc.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index d20184771e..7b8aa572d7 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -7,6 +7,7 @@ #include "clientversion.h" #include "init.h" #include "validation.h" +#include "httpserver.h" #include "net.h" #include "netbase.h" #include "rpc/blockchain.h" @@ -598,6 +599,20 @@ UniValue logging(const JSONRPCRequest& request) logCategories &= ~getCategoryMask(request.params[1]); } + // Update libevent logging if BCLog::LIBEVENT has changed. + // If the library version doesn't allow it, UpdateHTTPServerLogging() returns false, + // in which case we should clear the BCLog::LIBEVENT flag. + // Throw an error if the user has explicitly asked to change only the libevent + // flag and it failed. + uint32_t changedLogCategories = originalLogCategories ^ logCategories; + if (changedLogCategories & BCLog::LIBEVENT) { + if (!UpdateHTTPServerLogging(logCategories & BCLog::LIBEVENT)) { + logCategories &= ~BCLog::LIBEVENT; + if (changedLogCategories == BCLog::LIBEVENT) { + throw JSONRPCError(RPC_INVALID_PARAMETER, "libevent logging cannot be updated when using libevent before v2.1.1."); + } + } + } UniValue result(UniValue::VOBJ); std::vector<CLogCategoryActive> vLogCatActive = ListActiveLogCategories(); |