Module: wine Branch: master Commit: ce5fb9bb297b50e3810aba6d27eeb04678039fe5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ce5fb9bb297b50e3810aba6d27...
Author: Vitaliy Margolen wine-patches@kievinfo.com Date: Fri Dec 22 10:54:29 2006 -0700
dinput: AddRef and Release parent DirectInput class.
---
dlls/dinput/joystick_linux.c | 4 ++-- dlls/dinput/joystick_linuxinput.c | 4 ++++ dlls/dinput/keyboard.c | 10 +++++++++- dlls/dinput/mouse.c | 5 +++++ dlls/dinput/tests/keyboard.c | 2 ++ dlls/dinput/tests/mouse.c | 4 +++- 6 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c index 745fd5c..914d05d 100644 --- a/dlls/dinput/joystick_linux.c +++ b/dlls/dinput/joystick_linux.c @@ -484,7 +484,7 @@ static HRESULT alloc_device(REFGUID rgui hr = create_DataFormat(&c_dfDIJoystick2, &newDevice->base.data_format); if (hr != DI_OK) goto FAILED;
- IDirectInputDevice_AddRef((LPDIRECTINPUTDEVICE8A)newDevice->dinput); + IDirectInput_AddRef((LPDIRECTINPUTDEVICE8A)newDevice->dinput);
newDevice->devcaps.dwSize = sizeof(newDevice->devcaps); newDevice->devcaps.dwFlags = DIDC_ATTACHED; @@ -613,8 +613,8 @@ static ULONG WINAPI JoystickAImpl_Releas release_DataFormat(&This->base.data_format);
This->base.crit.DebugInfo->Spare[0] = 0; + IDirectInput_Release((LPDIRECTINPUTDEVICE8A)This->dinput); DeleteCriticalSection(&This->base.crit); - IDirectInputDevice_Release((LPDIRECTINPUTDEVICE8A)This->dinput);
HeapFree(GetProcessHeap(),0,This); return 0; diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c index 4cce222..b049730 100644 --- a/dlls/dinput/joystick_linuxinput.c +++ b/dlls/dinput/joystick_linuxinput.c @@ -393,7 +393,10 @@ static JoystickImpl *alloc_device(REFGUI
/* create the default transform filter */ if (create_DataFormat(&c_dfDIJoystick2, &newDevice->base.data_format) == DI_OK) + { + IDirectInput_AddRef((LPDIRECTINPUTDEVICE8A)newDevice->dinput); return newDevice; + }
HeapFree(GetProcessHeap(),0,newDevice); return NULL; @@ -491,6 +494,7 @@ static ULONG WINAPI JoystickAImpl_Releas /* release the data transform filter */ release_DataFormat(&This->base.data_format);
+ IDirectInput_Release((LPDIRECTINPUTDEVICE8A)This->dinput); DeleteCriticalSection(&This->base.crit);
HeapFree(GetProcessHeap(),0,This); diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index 14562b4..4308b45 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -198,7 +198,12 @@ static SysKeyboardImpl *alloc_device(REF
newDevice->base.data_format.wine_df = &c_dfDIKeyboard; if (create_DataFormat(&c_dfDIKeyboard, &newDevice->base.data_format) == DI_OK) + { + IDirectInput_AddRef((LPDIRECTINPUTDEVICE8A)newDevice->dinput); return newDevice; + } + + HeapFree(GetProcessHeap(), 0, newDevice); return NULL; }
@@ -214,6 +219,7 @@ static HRESULT keyboarddev_create_device IsEqualGUID(&IID_IDirectInputDevice8A,riid)) { *pdev = (IDirectInputDeviceA*) alloc_device(rguid, &SysKeyboardAvt, dinput); TRACE("Creating a Keyboard device (%p)\n", *pdev); + if (!*pdev) return DIERR_OUTOFMEMORY; return DI_OK; } else return DIERR_NOINTERFACE; @@ -232,6 +238,7 @@ static HRESULT keyboarddev_create_device IsEqualGUID(&IID_IDirectInputDevice8W,riid)) { *pdev = (IDirectInputDeviceW*) alloc_device(rguid, &SysKeyboardWvt, dinput); TRACE("Creating a Keyboard device (%p)\n", *pdev); + if (!*pdev) return DIERR_OUTOFMEMORY; return DI_OK; } else return DIERR_NOINTERFACE; @@ -257,8 +264,9 @@ static ULONG WINAPI SysKeyboardAImpl_Rel
set_dinput_hook(WH_KEYBOARD_LL, NULL);
- DeleteCriticalSection(&This->base.crit); HeapFree(GetProcessHeap(), 0, This->base.data_queue); + IDirectInput_Release((LPDIRECTINPUTDEVICE8A)This->dinput); + DeleteCriticalSection(&This->base.crit); HeapFree(GetProcessHeap(), 0, This);
return DI_OK; diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index 9ab1b1f..7b4fef6 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -194,8 +194,12 @@ static SysMouseImpl *alloc_device(REFGUI
newDevice->base.data_format.wine_df = &c_dfDIMouse2; if (create_DataFormat(&c_dfDIMouse2, &newDevice->base.data_format) == DI_OK) + { + IDirectInput_AddRef((LPDIRECTINPUTDEVICE8A)newDevice->dinput); return newDevice; + }
+ HeapFree(GetProcessHeap(), 0, newDevice); return NULL; }
@@ -270,6 +274,7 @@ static ULONG WINAPI SysMouseAImpl_Releas
release_DataFormat(&This->base.data_format);
+ IDirectInput_Release((LPDIRECTINPUTDEVICE8A)This->dinput); DeleteCriticalSection(&This->base.crit); HeapFree(GetProcessHeap(),0,This); return 0; diff --git a/dlls/dinput/tests/keyboard.c b/dlls/dinput/tests/keyboard.c index c911dcb..4503f2f 100644 --- a/dlls/dinput/tests/keyboard.c +++ b/dlls/dinput/tests/keyboard.c @@ -94,6 +94,8 @@ static void acquire_tests(LPDIRECTINPUT ok(hr == DIERR_INVALIDPARAM, "IDirectInputDevice_GetDeviceState(10,) should have failed: %s\n", DXGetErrorString8(hr)); hr = IDirectInputDevice_GetDeviceState(pKeyboard, sizeof(kbd_state), kbd_state); ok(SUCCEEDED(hr), "IDirectInputDevice_GetDeviceState() failed: %s\n", DXGetErrorString8(hr)); + + if (pKeyboard) IUnknown_Release(pKeyboard); }
static const HRESULT SetCoop_null_window[16] = { diff --git a/dlls/dinput/tests/mouse.c b/dlls/dinput/tests/mouse.c index 0743a2e..db95ab2 100644 --- a/dlls/dinput/tests/mouse.c +++ b/dlls/dinput/tests/mouse.c @@ -95,6 +95,7 @@ static void mouse_tests(void) LPDIRECTINPUT pDI = NULL; HINSTANCE hInstance = GetModuleHandle(NULL); HWND hwnd; + ULONG ref = 0;
hr = DirectInputCreate(hInstance, DIRECTINPUT_VERSION, &pDI, NULL); ok(SUCCEEDED(hr), "DirectInputCreate() failed: %s\n", DXGetErrorString8(hr)); @@ -112,7 +113,8 @@ static void mouse_tests(void)
DestroyWindow(hwnd); } - if (pDI) IUnknown_Release(pDI); + if (pDI) ref = IUnknown_Release(pDI); + ok(!ref, "IDirectInput_Release() reference count = %d\n", ref); }
START_TEST(mouse)