From 6a8bf96d73bf0a737d148e1b653bca94f4ade310 Mon Sep 17 00:00:00 2001 From: Vitaliy Margolen Date: Sun, 3 Jun 2007 09:09:32 -0600 Subject: [PATCH] dinput: Make sure to unacquire device before freeing it. --- dlls/dinput/joystick_linux.c | 2 ++ dlls/dinput/joystick_linuxinput.c | 2 ++ dlls/dinput/keyboard.c | 2 +- dlls/dinput/mouse.c | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c index 50a5f498567..1eafcc7a311 100644 --- a/dlls/dinput/joystick_linux.c +++ b/dlls/dinput/joystick_linux.c @@ -646,6 +646,8 @@ static ULONG WINAPI JoystickAImpl_Release(LPDIRECTINPUTDEVICE8A iface) if (ref) return ref; + IDirectInputDevice_Unacquire(iface); + /* Free the device name */ HeapFree(GetProcessHeap(),0,This->name); diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c index bfade84719d..b41145d5cf4 100644 --- a/dlls/dinput/joystick_linuxinput.c +++ b/dlls/dinput/joystick_linuxinput.c @@ -516,6 +516,8 @@ static ULONG WINAPI JoystickAImpl_Release(LPDIRECTINPUTDEVICE8A iface) if (ref) return ref; + IDirectInputDevice_Unacquire(iface); + /* Reset the FF state, free all effects, etc */ IDirectInputDevice8_SendForceFeedbackCommand(iface, DISFFC_RESET); diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index a4ba984983e..df117825110 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -281,7 +281,7 @@ static ULONG WINAPI SysKeyboardAImpl_Release(LPDIRECTINPUTDEVICE8A iface) ref = InterlockedDecrement(&This->base.ref); if (ref) return ref; - set_dinput_hook(WH_KEYBOARD_LL, NULL); + IDirectInputDevice_Unacquire(iface); HeapFree(GetProcessHeap(), 0, This->base.data_queue); diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index fcb98bbce0d..ea551ef940b 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -268,7 +268,7 @@ static ULONG WINAPI SysMouseAImpl_Release(LPDIRECTINPUTDEVICE8A iface) if (ref) return ref; - set_dinput_hook(WH_MOUSE_LL, NULL); + IDirectInputDevice_Unacquire(iface); /* Free the data queue */ HeapFree(GetProcessHeap(), 0, This->base.data_queue);