aboutsummaryrefslogtreecommitdiff
path: root/backends/networking/curl
diff options
context:
space:
mode:
authorAlexander Tkachev2016-06-01 14:07:50 +0600
committerAlexander Tkachev2016-08-24 16:07:55 +0600
commit1f974a7a2a2073074391fbf090d2bf909006e773 (patch)
treee9aa08c22b4400dea1006f064be06b2ee1e2a590 /backends/networking/curl
parenta66322408f95ff7b29cf6967eaecaac06dfe5b31 (diff)
downloadscummvm-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/networking/curl')
-rw-r--r--backends/networking/curl/connectionmanager.cpp18
-rw-r--r--backends/networking/curl/connectionmanager.h2
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();