diff options
author | Alexander Tkachev | 2016-06-01 14:07:50 +0600 |
---|---|---|
committer | Alexander Tkachev | 2016-08-24 16:07:55 +0600 |
commit | 1f974a7a2a2073074391fbf090d2bf909006e773 (patch) | |
tree | e9aa08c22b4400dea1006f064be06b2ee1e2a590 /backends | |
parent | a66322408f95ff7b29cf6967eaecaac06dfe5b31 (diff) | |
download | scummvm-rg350-1f974a7a2a2073074391fbf090d2bf909006e773.tar.gz scummvm-rg350-1f974a7a2a2073074391fbf090d2bf909006e773.tar.bz2 scummvm-rg350-1f974a7a2a2073074391fbf090d2bf909006e773.zip |
CLOUD: Fix ConnectionManager's destructor
It now terminates active Requests.
Diffstat (limited to 'backends')
-rw-r--r-- | backends/networking/curl/connectionmanager.cpp | 18 | ||||
-rw-r--r-- | backends/networking/curl/connectionmanager.h | 2 |
2 files changed, 18 insertions, 2 deletions
diff --git a/backends/networking/curl/connectionmanager.cpp b/backends/networking/curl/connectionmanager.cpp index ef3c858bec..a3cad0d005 100644 --- a/backends/networking/curl/connectionmanager.cpp +++ b/backends/networking/curl/connectionmanager.cpp @@ -43,6 +43,19 @@ ConnectionManager::ConnectionManager(): _multi(0), _timerStarted(false) { } ConnectionManager::~ConnectionManager() { + //terminate all requests + _handleMutex.lock(); + for (Common::Array<RequestWithCallback>::iterator i = _requests.begin(); i != _requests.end(); ++i) { + Request *request = i->request; + RequestCallback callback = i->callback; + if (request) request->finish(); + delete request; + if (callback) (*callback)(request); + } + _requests.clear(); + _handleMutex.unlock(); + + //cleanup curl_multi_cleanup(_multi); curl_global_cleanup(); } @@ -80,10 +93,11 @@ void ConnectionManager::stopTimer() { } void ConnectionManager::handle() { - //TODO: lock mutex here (in case another handle() would be called before this one ends) + //lock mutex here (in case another handle() would be called before this one ends) + _handleMutex.lock(); interateRequests(); processTransfers(); - //TODO: unlock mutex here + _handleMutex.unlock(); } void ConnectionManager::interateRequests() { diff --git a/backends/networking/curl/connectionmanager.h b/backends/networking/curl/connectionmanager.h index b39a779558..75cff0587b 100644 --- a/backends/networking/curl/connectionmanager.h +++ b/backends/networking/curl/connectionmanager.h @@ -27,6 +27,7 @@ #include "common/str.h" #include "common/singleton.h" #include "common/hashmap.h" +#include "common/mutex.h" typedef void CURL; typedef void CURLM; @@ -51,6 +52,7 @@ class ConnectionManager : public Common::Singleton<ConnectionManager> { CURLM *_multi; bool _timerStarted; Common::Array<RequestWithCallback> _requests; + Common::Mutex _handleMutex; void startTimer(int interval = 1000000); //1 second is the default interval void stopTimer(); |