diff options
| author | Paul Gilbert | 2016-11-15 21:04:30 -0500 | 
|---|---|---|
| committer | Paul Gilbert | 2016-11-15 21:04:30 -0500 | 
| commit | afb4b6227a0f20ca829801e00dcf75eeb4c18999 (patch) | |
| tree | bcff5fd2dd3d955f7dc4e1759f299b3c1c62d9d3 | |
| parent | 5971e0302f331dd05cdedc7ab4a9762cb947b02f (diff) | |
| download | scummvm-rg350-afb4b6227a0f20ca829801e00dcf75eeb4c18999.tar.gz scummvm-rg350-afb4b6227a0f20ca829801e00dcf75eeb4c18999.tar.bz2 scummvm-rg350-afb4b6227a0f20ca829801e00dcf75eeb4c18999.zip  | |
TITANIC: Fixes for freeing project and engine objects on exit
| -rw-r--r-- | engines/titanic/core/project_item.h | 1 | ||||
| -rw-r--r-- | engines/titanic/main_game_window.cpp | 1 | ||||
| -rw-r--r-- | engines/titanic/support/movie.cpp | 12 | ||||
| -rw-r--r-- | engines/titanic/titanic.cpp | 17 | 
4 files changed, 14 insertions, 17 deletions
diff --git a/engines/titanic/core/project_item.h b/engines/titanic/core/project_item.h index 20c4a4377a..14ca3fd229 100644 --- a/engines/titanic/core/project_item.h +++ b/engines/titanic/core/project_item.h @@ -152,6 +152,7 @@ public:  public:  	CLASSDEF;  	CProjectItem(); +	virtual ~CProjectItem() { destroyChildren(); }  	/**  	 * Save the data for the class to file diff --git a/engines/titanic/main_game_window.cpp b/engines/titanic/main_game_window.cpp index de0ac715ba..102458969e 100644 --- a/engines/titanic/main_game_window.cpp +++ b/engines/titanic/main_game_window.cpp @@ -46,6 +46,7 @@ CMainGameWindow::CMainGameWindow(TitanicEngine *vm): _vm(vm),  }  CMainGameWindow::~CMainGameWindow() { +	delete _project;  }  void CMainGameWindow::applicationStarting() { diff --git a/engines/titanic/support/movie.cpp b/engines/titanic/support/movie.cpp index 1bdcdee6da..c26e4eb3c4 100644 --- a/engines/titanic/support/movie.cpp +++ b/engines/titanic/support/movie.cpp @@ -50,15 +50,9 @@ void CMovie::init() {  }  void CMovie::deinit() { -	// Delete each movie in turn -	for (CMovieList::iterator i = _playingMovies->begin(); i != _playingMovies->end(); ) { -		// We need to increment iterator before deleting movie, -		// since the CMovie destructor calls removeFromPlayingMovies -		CMovie *movie = *i; -		++i; -		delete movie; -	} - +	// At this point, there shouldn't be any playing movies left, +	// since their owning objects should have freed them +	assert(_playingMovies->empty());  	delete _playingMovies;  	delete _movieSurface;  } diff --git a/engines/titanic/titanic.cpp b/engines/titanic/titanic.cpp index c6fb0a17e3..e80dc54bcb 100644 --- a/engines/titanic/titanic.cpp +++ b/engines/titanic/titanic.cpp @@ -69,13 +69,6 @@ TitanicEngine::TitanicEngine(OSystem *syst, const TitanicGameDescription *gameDe  }  TitanicEngine::~TitanicEngine() { -	delete _debugger; -	delete _events; -	delete _window; -	delete _screenManager; -	delete _filesManager; -	delete _screen; -	CSaveableObject::freeClassList();  }  void TitanicEngine::initializePath(const Common::FSNode &gamePath) { @@ -116,10 +109,16 @@ void TitanicEngine::initialize() {  }  void TitanicEngine::deinitialize() { +	delete _debugger; +	delete _events; +	delete _window; +	delete _screenManager; +	delete _filesManager; +	delete _screen; +  	CEnterExitFirstClassState::deinit();  	CGetLiftEye2::deinit();  	CHose::deinit(); -	CMovie::deinit();  	CSGTNavigation::deinit();  	CSGTStateRoom::deinit();  	CExitPellerator::deinit(); @@ -127,6 +126,8 @@ void TitanicEngine::deinitialize() {  	CGameObject::deinit();  	CTelevision::deinit();  	TTnpcScript::deinit(); +	CMovie::deinit(); +	CSaveableObject::freeClassList();  }  Common::Error TitanicEngine::run() {  | 
