diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-21 12:09:59 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-21 12:09:59 (GMT) |
| commit | 5bf0a084ace0e6b673efa4552b40de8b36e0668e (patch) | |
| tree | 8683ff6c11167cb3b95f7b4ae65269b3cb6dce98 /src | |
| parent | 78b1ffb11dc78130cdb120acf37d5930807bff6c (diff) | |
| download | powder-5bf0a084ace0e6b673efa4552b40de8b36e0668e.zip powder-5bf0a084ace0e6b673efa4552b40de8b36e0668e.tar.gz | |
Prevent race condition when reloading local stamps, fix task so "after()" gets called and correct stamp name so they actually get deleted"
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/Client.cpp | 9 | ||||
| -rw-r--r-- | src/localbrowser/LocalBrowserController.cpp | 13 | ||||
| -rw-r--r-- | src/localbrowser/LocalBrowserController.h | 1 | ||||
| -rw-r--r-- | src/tasks/Task.cpp | 11 |
4 files changed, 24 insertions, 10 deletions
diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 5ecb8ac..116fa02 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -371,7 +371,7 @@ SaveFile * Client::GetStamp(string stampID) stampFile.read((char *)tempData, fileSize); stampFile.close(); - SaveFile * file = new SaveFile(string(STAMPS_DIR PATH_SEP + stampID + ".stm").c_str()); + SaveFile * file = new SaveFile(string(stampID).c_str()); GameSave * tempSave = new GameSave((char *)tempData, fileSize); file->SetGameSave(tempSave); return file; @@ -388,7 +388,12 @@ void Client::DeleteStamp(string stampID) { if((*iterator) == stampID) { - remove(string(STAMPS_DIR PATH_SEP + stampID + ".stm").c_str()); + stringstream stampFilename; + stampFilename << STAMPS_DIR; + stampFilename << PATH_SEP; + stampFilename << stampID; + stampFilename << ".stm"; + remove(stampFilename.str().c_str()); stampIDs.erase(iterator); return; } diff --git a/src/localbrowser/LocalBrowserController.cpp b/src/localbrowser/LocalBrowserController.cpp index 47f02bb..28a7c64 100644 --- a/src/localbrowser/LocalBrowserController.cpp +++ b/src/localbrowser/LocalBrowserController.cpp @@ -65,8 +65,9 @@ void LocalBrowserController::removeSelectedC() class RemoveSavesTask : public Task { std::vector<std::string> saves; + LocalBrowserController * c; public: - RemoveSavesTask(std::vector<std::string> saves_) { saves = saves_; } + RemoveSavesTask(LocalBrowserController * c, std::vector<std::string> saves_) : c(c) { saves = saves_; } virtual bool doWork() { for(int i = 0; i < saves.size(); i++) @@ -80,10 +81,18 @@ void LocalBrowserController::removeSelectedC() } return true; } + virtual void after() + { + c->RefreshSavesList(); + } }; std::vector<std::string> selected = browserModel->GetSelected(); - new TaskWindow("Removing saves", new RemoveSavesTask(selected)); + new TaskWindow("Removing saves", new RemoveSavesTask(this, selected)); +} + +void LocalBrowserController::RefreshSavesList() +{ ClearSelection(); browserModel->UpdateSavesList(browserModel->GetPageNum()); } diff --git a/src/localbrowser/LocalBrowserController.h b/src/localbrowser/LocalBrowserController.h index 233ff9c..1f81ab6 100644 --- a/src/localbrowser/LocalBrowserController.h +++ b/src/localbrowser/LocalBrowserController.h @@ -27,6 +27,7 @@ public: void removeSelectedC(); void ClearSelection(); void Selected(std::string stampID, bool selected); + void RefreshSavesList(); void OpenSave(SaveFile * stamp); void SetStamp(); void NextPage(); diff --git a/src/tasks/Task.cpp b/src/tasks/Task.cpp index b2ded16..8ab0ded 100644 --- a/src/tasks/Task.cpp +++ b/src/tasks/Task.cpp @@ -86,16 +86,15 @@ void Task::Poll() notifyStatusMain(); } - if(done) + if(newDone!=done) { + done = newDone; + pthread_join(doWorkThread, NULL); pthread_mutex_destroy(&taskMutex); + after(); - } - - if(newDone!=done) - { - done = newDone; + notifyDoneMain(); } } |
