|
From: Lasse Kärkkäi. <tr...@us...> - 2010-08-12 22:45:07
|
Module: performous
Branch: master
Commit: 8a47959c4e54a3c571bd1465a1ae96d763dd6c1a
Author: Lasse Karkkainen <tro...@tr...>
Date: Sat Jun 19 05:47:03 2010 +0300
A temporary fix for the Alt+F4 segfault problem, caused by screen_sing not being exited before destroying Audio, causing engine thread to sometimes access Audio::getPosition on a dead object...
---
game/main.cc | 3 +--
game/screen.hh | 1 +
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/game/main.cc b/game/main.cc
index 9b0b597..fcc41ec 100644
--- a/game/main.cc
+++ b/game/main.cc
@@ -107,10 +107,9 @@ static void checkEvents_SDL(ScreenManager& sm) {
void mainLoop(std::string const& songlist) {
Window window(config["graphic/window_width"].i(), config["graphic/window_height"].i(), config["graphic/fullscreen"].b());
+ Audio audio;
ScreenManager sm(window);
try {
- sm.flashMessage(_("Audio playback..."), 0.0f, 1.0f, 1.0f); window.blank(); sm.drawFlashMessage(); window.swap();
- Audio audio;
sm.flashMessage(_("Miscellaneous..."), 0.0f, 1.0f, 1.0f); window.blank(); sm.drawFlashMessage(); window.swap();
Backgrounds backgrounds;
Database database(getConfigDir() / "database.xml");
diff --git a/game/screen.hh b/game/screen.hh
index ba7da69..fb853af 100644
--- a/game/screen.hh
+++ b/game/screen.hh
@@ -37,6 +37,7 @@ class ScreenManager: public Singleton <ScreenManager> {
public:
/// constructor
ScreenManager(Window& window);
+ ~ScreenManager() { if (currentScreen) currentScreen->exit(); }
/// adds a screen to the manager
void addScreen(Screen* s) { std::string tmp = s->getName(); screens.insert(tmp, s); };
/// Switches active screen
|