mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-02 09:40:35 +00:00
(svn r13022) -Fix: driver list wasn't freed, replace by statically allocated one
This commit is contained in:
parent
2ba05f8987
commit
5e51833ee5
20
src/driver.h
20
src/driver.h
@ -43,7 +43,7 @@ private:
|
||||
|
||||
static Drivers &GetDrivers()
|
||||
{
|
||||
static Drivers &s_drivers = *new Drivers();
|
||||
static Drivers s_drivers;
|
||||
return s_drivers;
|
||||
}
|
||||
|
||||
@ -67,7 +67,23 @@ public:
|
||||
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);
|
||||
|
@ -288,8 +288,20 @@ static void InitializeDynamicVariables()
|
||||
}
|
||||
|
||||
|
||||
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 @@ static void UnInitializeGame()
|
||||
free((void*)_industry_sort);
|
||||
|
||||
free(_config_file);
|
||||
|
||||
/* Close all and any open filehandles */
|
||||
FioCloseAll();
|
||||
}
|
||||
|
||||
static void LoadIntroGame()
|
||||
@ -623,13 +638,6 @@ int ttd_main(int argc, char *argv[])
|
||||
_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 @@ int ttd_main(int argc, char *argv[])
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user