(svn r25268) -Codechange: [Win32] Simplify resource deallocation in case initializing the DirectMusic driver fails.

This commit is contained in:
michi_cc 2013-05-20 13:35:38 +00:00
parent 5eb7ec17b7
commit 4afea75116
2 changed files with 8 additions and 12 deletions

View File

@ -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;

View File

@ -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();