http: Unlisten sockets after all workers quit
This (almost) move only ensures the event base loop doesn't exit before HTTP worker threads exit. This way events registered by HTTP workers are processed and not discarded.
This commit is contained in:
parent
18e9685816
commit
6b13580f4e
1 changed files with 6 additions and 4 deletions
|
@ -443,10 +443,6 @@ void InterruptHTTPServer()
|
|||
{
|
||||
LogPrint(BCLog::HTTP, "Interrupting HTTP server\n");
|
||||
if (eventHTTP) {
|
||||
// Unlisten sockets
|
||||
for (evhttp_bound_socket *socket : boundSockets) {
|
||||
evhttp_del_accept_socket(eventHTTP, socket);
|
||||
}
|
||||
// Reject requests on current connections
|
||||
evhttp_set_gencb(eventHTTP, http_reject_request_cb, nullptr);
|
||||
}
|
||||
|
@ -466,6 +462,12 @@ void StopHTTPServer()
|
|||
delete workQueue;
|
||||
workQueue = nullptr;
|
||||
}
|
||||
// Unlisten sockets, these are what make the event loop running, which means
|
||||
// that after this and all connections are closed the event loop will quit.
|
||||
for (evhttp_bound_socket *socket : boundSockets) {
|
||||
evhttp_del_accept_socket(eventHTTP, socket);
|
||||
}
|
||||
boundSockets.clear();
|
||||
if (eventBase) {
|
||||
LogPrint(BCLog::HTTP, "Waiting for HTTP event thread to exit\n");
|
||||
// Exit the event loop as soon as there are no active events.
|
||||
|
|
Loading…
Reference in a new issue