diff options
| author | MarcoFalke <[email protected]> | 2020-05-18 09:17:28 -0400 |
|---|---|---|
| committer | MarcoFalke <[email protected]> | 2020-05-19 10:41:44 -0400 |
| commit | faf45d1f1f997c316fc4c611a23c4456533eefe9 (patch) | |
| tree | c206b774bea2956b6a1fd947946273afaf7adb16 /src/httpserver.cpp | |
| parent | test: Replace inline-comments with logs, pep8 formatting (diff) | |
| download | discoin-faf45d1f1f997c316fc4c611a23c4456533eefe9.tar.xz discoin-faf45d1f1f997c316fc4c611a23c4456533eefe9.zip | |
http: Avoid crash when g_thread_http was never started
g_thread_http can not be joined when it is not joinable. Avoid crashing
the node by adding the required check and add a test.
Diffstat (limited to 'src/httpserver.cpp')
| -rw-r--r-- | src/httpserver.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/httpserver.cpp b/src/httpserver.cpp index ffe246b24..5e78fd1d7 100644 --- a/src/httpserver.cpp +++ b/src/httpserver.cpp @@ -421,7 +421,7 @@ bool UpdateHTTPServerLogging(bool enable) { #endif } -static std::thread threadHTTP; +static std::thread g_thread_http; static std::vector<std::thread> g_thread_http_workers; void StartHTTPServer() @@ -429,7 +429,7 @@ void StartHTTPServer() LogPrint(BCLog::HTTP, "Starting HTTP server\n"); int rpcThreads = std::max((long)gArgs.GetArg("-rpcthreads", DEFAULT_HTTP_THREADS), 1L); LogPrintf("HTTP: starting %d worker threads\n", rpcThreads); - threadHTTP = std::thread(ThreadHTTP, eventBase); + g_thread_http = std::thread(ThreadHTTP, eventBase); for (int i = 0; i < rpcThreads; i++) { g_thread_http_workers.emplace_back(HTTPWorkQueueRun, workQueue, i); @@ -467,7 +467,7 @@ void StopHTTPServer() boundSockets.clear(); if (eventBase) { LogPrint(BCLog::HTTP, "Waiting for HTTP event thread to exit\n"); - threadHTTP.join(); + if (g_thread_http.joinable()) g_thread_http.join(); } if (eventHTTP) { evhttp_free(eventHTTP); |