(svn r13022) -Fix: driver list wasn't freed, replace by statically allocated one
authorsmatz
Thu, 08 May 2008 23:26:17 +0000
changeset 9159 e8857a691840
parent 9158 b2de54b781eb
child 9160 d7160ce357d2
(svn r13022) -Fix: driver list wasn't freed, replace by statically allocated one
src/driver.h
src/openttd.cpp
--- a/src/driver.h	Thu May 08 22:53:49 2008 +0000
+++ b/src/driver.h	Thu May 08 23:26:17 2008 +0000
@@ -43,7 +43,7 @@
 
 	static Drivers &GetDrivers()
 	{
-		static Drivers &s_drivers = *new Drivers();
+		static Drivers s_drivers;
 		return s_drivers;
 	}
 
@@ -67,7 +67,23 @@
 		name(NULL)
 	{}
 
-	virtual ~DriverFactoryBase() { if (this->name != NULL) GetDrivers().erase(this->name); free(this->name); }
+	/** Frees memory used for this->name
+	 */
+	virtual ~DriverFactoryBase() {
+		if (this->name == NULL) return;
+		GetDrivers().erase(this->name);
+		free(this->name);
+	}
+
+	/** Shuts down all active drivers
+	 */
+	static void ShutdownDrivers()
+	{
+		for (Driver::Type dt = Driver::DT_BEGIN; dt < Driver::DT_END; dt++) {
+			Driver *driver = *GetActiveDriver(dt);
+			if (driver != NULL) driver->Stop();
+		}
+	}
 
 	static const Driver *SelectDriver(const char *name, Driver::Type type);
 	static char *GetDriversInfo(char *p, const char *last);
--- a/src/openttd.cpp	Thu May 08 22:53:49 2008 +0000
+++ b/src/openttd.cpp	Thu May 08 23:26:17 2008 +0000
@@ -288,8 +288,20 @@
 }
 
 
-static void UnInitializeGame()
+/** Unitializes drivers, frees allocated memory, cleans pools, ...
+ * Generally, prepares the game for shutting down
+ */
+static void ShutdownGame()
 {
+	/* stop the AI */
+	AI_Uninitialize();
+
+	IConsoleFree();
+
+	if (_network_available) NetworkShutDown(); // Shut down the network and close any open connections
+
+	DriverFactoryBase::ShutdownDrivers();
+
 	UnInitWindowSystem();
 
 	/* Uninitialize airport state machines */
@@ -310,6 +322,9 @@
 	free((void*)_industry_sort);
 
 	free(_config_file);
+
+	/* Close all and any open filehandles */
+	FioCloseAll();
 }
 
 static void LoadIntroGame()
@@ -623,13 +638,6 @@
 	_video_driver->MainLoop();
 
 	WaitTillSaved();
-	IConsoleFree();
-
-	if (_network_available) NetworkShutDown(); // Shut down the network and close any open connections
-
-	_video_driver->Stop();
-	_music_driver->Stop();
-	_sound_driver->Stop();
 
 	/* only save config if we have to */
 	if (save_config) {
@@ -637,14 +645,8 @@
 		SaveToHighScore();
 	}
 
-	/* Reset windowing system and free config file */
-	UnInitializeGame();
-
-	/* stop the AI */
-	AI_Uninitialize();
-
-	/* Close all and any open filehandles */
-	FioCloseAll();
+	/* Reset windowing system, stop drivers, free used memory, ... */
+	ShutdownGame();
 
 	return 0;
 }