diff --git a/include/engine.h b/include/engine.h index 2951edb38..669570379 100644 --- a/include/engine.h +++ b/include/engine.h @@ -1,8 +1,8 @@ /* * engine.h - engine-system of LMMS * - * Copyright (c) 2006-2008 Tobias Doerffel - * + * Copyright (c) 2006-2010 Tobias Doerffel + * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * * This program is free software; you can redistribute it and/or @@ -160,6 +160,16 @@ public: private: + // small helper function which sets the pointer to NULL before actually deleting + // the object it refers to + template + static inline void deleteHelper( T * * ptr ) + { + T * tmp = *ptr; + *ptr = NULL; + delete tmp; + } + static bool s_hasGUI; static bool s_suppressMessages; static float s_framesPerTick; diff --git a/src/core/engine.cpp b/src/core/engine.cpp index 98d3b5cd0..ebc352011 100644 --- a/src/core/engine.cpp +++ b/src/core/engine.cpp @@ -3,8 +3,8 @@ /* * engine.cpp - implementation of LMMS' engine-system * - * Copyright (c) 2006-2008 Tobias Doerffel - * + * Copyright (c) 2006-2010 Tobias Doerffel + * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * * This program is free software; you can redistribute it and/or @@ -115,43 +115,32 @@ void engine::destroy() { s_mixer->stopProcessing(); - delete s_projectNotes; - s_projectNotes = NULL; - delete s_songEditor; - s_songEditor = NULL; - delete s_bbEditor; - s_bbEditor = NULL; - delete s_pianoRoll; - s_pianoRoll = NULL; - delete s_automationEditor; - s_automationEditor = NULL; - - delete s_fxMixerView; - s_fxMixerView = NULL; + deleteHelper( &s_projectNotes ); + deleteHelper( &s_songEditor ); + deleteHelper( &s_bbEditor ); + deleteHelper( &s_pianoRoll ); + deleteHelper( &s_automationEditor ); + deleteHelper( &s_fxMixerView ); presetPreviewPlayHandle::cleanup(); InstrumentTrackView::cleanupWindowPool(); s_song->clearProject(); - delete s_bbTrackContainer; - s_bbTrackContainer = NULL; - delete s_dummyTC; - s_dummyTC = NULL; - delete s_mixer; - s_mixer = NULL; - delete s_fxMixer; - s_fxMixer = NULL; + deleteHelper( &s_bbTrackContainer ); + deleteHelper( &s_dummyTC ); - delete s_ladspaManager; + deleteHelper( &s_mixer ); + deleteHelper( &s_fxMixer ); + + deleteHelper( &s_ladspaManager ); //delete configManager::inst(); - delete s_projectJournal; - s_projectJournal = NULL; + deleteHelper( &s_projectJournal ); + s_mainWindow = NULL; - delete s_song; - s_song = NULL; + deleteHelper( &s_song ); delete configManager::inst(); } diff --git a/src/core/track.cpp b/src/core/track.cpp index 18962d22b..bc63a7b40 100644 --- a/src/core/track.cpp +++ b/src/core/track.cpp @@ -2,8 +2,8 @@ * track.cpp - implementation of classes concerning tracks -> necessary for * all track-like objects (beat/bassline, sample-track...) * - * Copyright (c) 2004-2009 Tobias Doerffel - * + * Copyright (c) 2004-2010 Tobias Doerffel + * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * * This program is free software; you can redistribute it and/or @@ -1796,8 +1796,11 @@ void track::removeTCO( trackContentObject * _tco ) if( it != m_trackContentObjects.end() ) { m_trackContentObjects.erase( it ); - engine::getSong()->updateLength(); - engine::getSong()->setModified(); + if( engine::getSong() ) + { + engine::getSong()->updateLength(); + engine::getSong()->setModified(); + } } }