aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/cloud/storage.cpp10
-rw-r--r--backends/cloud/storage.h1
2 files changed, 10 insertions, 1 deletions
diff --git a/backends/cloud/storage.cpp b/backends/cloud/storage.cpp
index 08ab9e9c90..b98f213327 100644
--- a/backends/cloud/storage.cpp
+++ b/backends/cloud/storage.cpp
@@ -52,12 +52,18 @@ Networking::Request *Storage::addRequest(Networking::Request *request) {
}
void Storage::requestFinishedCallback(Networking::Request *invalidRequestPointer) {
+ bool restartSync = false;
+
_runningRequestsMutex.lock();
if (invalidRequestPointer == _savesSyncRequest)
_savesSyncRequest = nullptr;
--_runningRequestsCount;
- if (_runningRequestsCount == 0) debug("Storage is not working now");
+ if (_syncRestartRequestsed) restartSync = true;
+ if (_runningRequestsCount == 0 && !restartSync) debug("Storage is not working now");
_runningRequestsMutex.unlock();
+
+ if (restartSync)
+ syncSaves(nullptr, nullptr);
}
Networking::Request *Storage::upload(Common::String remotePath, Common::String localPath, UploadCallback callback, Networking::ErrorCallback errorCallback) {
@@ -111,11 +117,13 @@ SavesSyncRequest *Storage::syncSaves(BoolCallback callback, Networking::ErrorCal
_runningRequestsMutex.lock();
if (_savesSyncRequest) {
warning("Storage::syncSaves: there is a sync in progress already");
+ _syncRestartRequestsed = true;
_runningRequestsMutex.unlock();
return _savesSyncRequest;
}
if (!errorCallback) errorCallback = getErrorPrintingCallback();
_savesSyncRequest = new SavesSyncRequest(this, callback, errorCallback);
+ _syncRestartRequestsed = false;
_runningRequestsMutex.unlock();
return (SavesSyncRequest *)addRequest(_savesSyncRequest); //who knows what that ConnMan could return in the future
}
diff --git a/backends/cloud/storage.h b/backends/cloud/storage.h
index a76f2169bc..ace2f30864 100644
--- a/backends/cloud/storage.h
+++ b/backends/cloud/storage.h
@@ -62,6 +62,7 @@ protected:
uint32 _runningRequestsCount;
Common::Mutex _runningRequestsMutex;
SavesSyncRequest *_savesSyncRequest;
+ bool _syncRestartRequestsed;
/** Returns default error callback (printErrorResponse). */
virtual Networking::ErrorCallback getErrorPrintingCallback();