Module: wine Branch: master Commit: 9fac9d8ffdc2d935d69bc11fc36ec714e8befa94 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9fac9d8ffdc2d935d69bc11fc3...
Author: Jörg Höhle hoehle@users.sourceforge.net Date: Wed Jan 27 18:16:55 2010 +0100
winmm: Fix MIDI resource leaks.
---
dlls/winmm/winmm.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/dlls/winmm/winmm.c b/dlls/winmm/winmm.c index b2caa48..1a1fdad 100644 --- a/dlls/winmm/winmm.c +++ b/dlls/winmm/winmm.c @@ -1772,6 +1772,10 @@ MMRESULT WINAPI midiStreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID, /* FIXME: the correct value is not allocated yet for MAPPER */ mosm.wDeviceID = *lpuDeviceID; lpwm = MIDI_OutAlloc(&hMidiOut, &dwCallback, &dwInstance, &fdwOpen, 1, &mosm); + if (!lpwm) { + HeapFree(GetProcessHeap(), 0, lpMidiStrm); + return MMSYSERR_NOMEM; + } lpMidiStrm->hDevice = hMidiOut; if (lphMidiStrm) *lphMidiStrm = (HMIDISTRM)hMidiOut; @@ -1779,6 +1783,12 @@ MMRESULT WINAPI midiStreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID, lpwm->mld.uDeviceID = *lpuDeviceID;
ret = MMDRV_Open(&lpwm->mld, MODM_OPEN, (DWORD_PTR)&lpwm->mod, fdwOpen); + if (ret != MMSYSERR_NOERROR) { + MMDRV_Free(hMidiOut, &lpwm->mld); + HeapFree(GetProcessHeap(), 0, lpMidiStrm); + return ret; + } + lpMidiStrm->hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); lpMidiStrm->wFlags = HIWORD(fdwOpen);