From 7d7fe7c121940c9bc5af27623e8e9d75a1559f0c Mon Sep 17 00:00:00 2001 From: Francois Boisvert Date: Sat, 3 Apr 1999 16:27:53 +0000 Subject: [PATCH] Suspend the window locks before DefKeybEventProc and DefMouseEventProc. --- windows/keyboard.c | 5 +++++ windows/mouse.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/windows/keyboard.c b/windows/keyboard.c index fa39c62e9f0..e94148585d4 100644 --- a/windows/keyboard.c +++ b/windows/keyboard.c @@ -79,6 +79,7 @@ void KEYBOARD_SendEvent( BYTE bVk, BYTE bScan, DWORD dwFlags, DWORD posX, DWORD posY, DWORD time ) { WINE_KEYBDEVENT wke; + int iWndsLocks; if ( !DefKeybEventProc ) return; @@ -89,7 +90,11 @@ void KEYBOARD_SendEvent( BYTE bVk, BYTE bScan, DWORD dwFlags, wke.posY = posY; wke.time = time; + /* To avoid deadlocks, we have to suspend all locks on windows structures + before the program control is passed to the keyboard driver */ + iWndsLocks = WIN_SuspendWndsLock(); DefKeybEventProc( bVk, bScan, dwFlags, (DWORD)&wke ); + WIN_RestoreWndsLock(iWndsLocks); } /********************************************************************** diff --git a/windows/mouse.c b/windows/mouse.c index cfd59f1e6d7..7a47283aaf7 100644 --- a/windows/mouse.c +++ b/windows/mouse.c @@ -58,6 +58,7 @@ void MOUSE_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY, { int width = MONITOR_GetWidth (&MONITOR_PrimaryMonitor); int height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor); + int iWndsLocks; WINE_MOUSEEVENT wme; BOOL bOldWarpPointer; @@ -75,6 +76,10 @@ void MOUSE_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY, wme.hWnd = hWnd; bOldWarpPointer = MOUSE_Driver->pEnableWarpPointer(FALSE); + /* To avoid deadlocks, we have to suspend all locks on windows structures + before the program control is passed to the mouse driver */ + iWndsLocks = WIN_SuspendWndsLock(); DefMouseEventProc( mouseStatus, posX, posY, 0, (DWORD)&wme ); + WIN_RestoreWndsLock(iWndsLocks); MOUSE_Driver->pEnableWarpPointer(bOldWarpPointer); }