1
0
Fork 0

Fix: race-condition when quitting the game with libcurl (#11688)

There could be a callback in _new_http_callbacks that is not
processed yet. All callbacks in _http_callbacks were cancelled,
but not the ones in _new_http_callbacks
pull/11694/head
Patric Stout 2024-01-05 19:48:21 +01:00 committed by GitHub
parent 8bc473766b
commit 28e2576589
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 18 deletions

View File

@ -278,10 +278,9 @@ void NetworkHTTPUninitialize()
{ {
_http_thread_exit = true; _http_thread_exit = true;
/* Queues must be cleared (and the queue CV signalled) after _http_thread_exit is set to ensure that the HTTP thread can exit */ /* Ensure the callbacks are handled. This is mostly needed as we send
for (auto &callback : _http_callbacks) { * a survey just before close, and that might be pending here. */
callback->ClearQueue(); NetworkHTTPSocketHandler::HTTPReceive();
}
{ {
std::lock_guard<std::mutex> lock(_http_mutex); std::lock_guard<std::mutex> lock(_http_mutex);

View File

@ -97,20 +97,6 @@ public:
return this->queue.empty(); return this->queue.empty();
} }
/**
* Clear everything in the queue.
*
* Should be called from the Game Thread.
*/
void ClearQueue()
{
std::lock_guard<std::mutex> lock(this->mutex);
this->queue.clear();
this->queue_cv.notify_all();
}
HTTPThreadSafeCallback(HTTPCallback *callback) : callback(callback) {} HTTPThreadSafeCallback(HTTPCallback *callback) : callback(callback) {}
~HTTPThreadSafeCallback() ~HTTPThreadSafeCallback()