From 0882b37930bf1a84e90b9f4107d00b1ac1aefd30 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Mon, 20 May 2013 15:00:13 +0200 Subject: -Codechange: [Win32] Simplify resource deallocation in case initializing the DirectMusic driver fails. --- src/music/dmusic.cpp | 18 ++++++------------ src/music/dmusic.h | 2 ++ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index cb255e7..152bbb2 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -82,24 +82,16 @@ const char *MusicDriver_DMusic::Start(const char * const *parm) IID_IDirectMusicPerformance, (LPVOID*)&performance ))) { - proc.CoUninitialize(); return "Failed to create the performance object"; } /* initialize it */ if (FAILED(performance->Init(NULL, NULL, NULL))) { - performance->Release(); - performance = NULL; - proc.CoUninitialize(); return "Failed to initialize performance object"; } /* choose default Windows synth */ if (FAILED(performance->AddPort(NULL))) { - performance->CloseDown(); - performance->Release(); - performance = NULL; - proc.CoUninitialize(); return "AddPort failed"; } @@ -111,10 +103,6 @@ const char *MusicDriver_DMusic::Start(const char * const *parm) IID_IDirectMusicLoader, (LPVOID*)&loader ))) { - performance->CloseDown(); - performance->Release(); - performance = NULL; - proc.CoUninitialize(); return "Failed to create loader object"; } @@ -122,6 +110,12 @@ const char *MusicDriver_DMusic::Start(const char * const *parm) } +MusicDriver_DMusic::~MusicDriver_DMusic() +{ + this->Stop(); +} + + void MusicDriver_DMusic::Stop() { seeking = false; diff --git a/src/music/dmusic.h b/src/music/dmusic.h index b3fc996..29eee8e 100644 --- a/src/music/dmusic.h +++ b/src/music/dmusic.h @@ -17,6 +17,8 @@ /** Music player making use of DirectX. */ class MusicDriver_DMusic: public MusicDriver { public: + virtual ~MusicDriver_DMusic(); + /* virtual */ const char *Start(const char * const *param); /* virtual */ void Stop(); -- 1.7.9