Fix race condition between starting HTTP server thread and setting EventBase()

Split StartHTTPServer into InitHTTPServer and StartHTTPServer to give
clients a window to register their handlers without race conditions.

Thanks @ajweiss for figuring this out.
This commit is contained in:
Wladimir J. van der Laan
2015-08-28 16:55:16 +02:00
committed by Jack Grigg
parent 9fb5b94e64
commit 116503c0b8
3 changed files with 26 additions and 11 deletions

View File

@@ -20,7 +20,14 @@ struct event_base;
class CService;
class HTTPRequest;
/** Start HTTP server */
/** Initialize HTTP server.
* Call this before RegisterHTTPHandler or EventBase().
*/
bool InitHTTPServer();
/** Start HTTP server.
* This is separate from InitHTTPServer to give users race-condition-free time
* to register their handlers between InitHTTPServer and StartHTTPServer.
*/
bool StartHTTPServer(boost::thread_group& threadGroup);
/** Interrupt HTTP server threads */
void InterruptHTTPServer();