Fix race condition causing possible crash on startup

This commit is contained in:
Ilari Liusvaara 2013-04-14 20:11:14 +03:00
parent 99b666f790
commit b53f647315

View file

@ -782,34 +782,42 @@ void wxwin_mainwindow::notify_exit() throw()
Destroy(); Destroy();
} }
std::string read_variable_map(const std::map<std::string, std::string>& vars, const std::string& key)
{
if(!vars.count(key))
return "";
return vars.find(key)->second;
}
void wxwin_mainwindow::update_statusbar(const std::map<std::string, std::string>& vars) void wxwin_mainwindow::update_statusbar(const std::map<std::string, std::string>& vars)
{ {
if(vars.empty()) if(vars.empty())
return; return;
try { try {
std::ostringstream s; std::ostringstream s;
bool recording = (vars.find("!mode")->second == "R"); bool recording = (read_variable_map(vars, "!mode") == "R");
if(recording) if(recording)
s << "Frame: " << vars.find("!frame")->second; s << "Frame: " << read_variable_map(vars, "!frame");
else else
s << "Frame: " << vars.find("!frame")->second << "/" << vars.find("!length")->second; s << "Frame: " << read_variable_map(vars, "!frame") << "/" <<
s << " Lag: " << vars.find("!lag")->second; read_variable_map(vars, "!length");
s << " Subframe: " << vars.find("!subframe")->second; s << " Lag: " << read_variable_map(vars, "!lag");
s << " Subframe: " << read_variable_map(vars, "!subframe");
if(vars.count("!saveslot")) if(vars.count("!saveslot"))
s << " Slot: " << vars.find("!saveslot")->second; s << " Slot: " << read_variable_map(vars, "!saveslot");
if(vars.count("!saveslotinfo")) if(vars.count("!saveslotinfo"))
s << " [" << vars.find("!saveslotinfo")->second << "]"; s << " [" << read_variable_map(vars, "!saveslotinfo") << "]";
s << " Speed: " << vars.find("!speed")->second << "%"; s << " Speed: " << read_variable_map(vars, "!speed") << "%";
s << " "; s << " ";
if(vars.find("!dumping")->second != "") if(read_variable_map(vars, "!dumping") != "")
s << " Dumping"; s << " Dumping";
if(vars.find("!mode")->second == "C") if(read_variable_map(vars, "!mode") == "C")
s << " Corrupt"; s << " Corrupt";
else if(vars.find("!mode")->second == "R") else if(read_variable_map(vars, "!mode") == "R")
s << " Recording"; s << " Recording";
else if(vars.find("!mode")->second == "P") else if(read_variable_map(vars, "!mode") == "P")
s << " Playback"; s << " Playback";
else if(vars.find("!mode")->second == "F") else if(read_variable_map(vars, "!mode") == "F")
s << " Finished"; s << " Finished";
else else
s << " Unknown"; s << " Unknown";