Prevent race condition when reloading local stamps, fix task so "after()" gets called and correct stamp name so they actually get deleted"
This commit is contained in:
parent
78b1ffb11d
commit
5bf0a084ac
@ -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;
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -86,16 +86,15 @@ void Task::Poll()
|
||||
notifyStatusMain();
|
||||
}
|
||||
|
||||
if(done)
|
||||
{
|
||||
pthread_join(doWorkThread, NULL);
|
||||
pthread_mutex_destroy(&taskMutex);
|
||||
after();
|
||||
}
|
||||
|
||||
if(newDone!=done)
|
||||
{
|
||||
done = newDone;
|
||||
|
||||
pthread_join(doWorkThread, NULL);
|
||||
pthread_mutex_destroy(&taskMutex);
|
||||
|
||||
after();
|
||||
|
||||
notifyDoneMain();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user