diff options
Diffstat (limited to 'backends/networking/curl')
-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(); |