From 4b6b1c3fc8e86b5a3cdad25230fefe0af68ee4f1 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand <weigand@informatik.uni-erlangen.de> Date: Mon, 17 May 1999 14:55:30 +0000 Subject: [PATCH] Suspend window locks before calling hook procedure. --- windows/hook.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/windows/hook.c b/windows/hook.c index 2d694afcfe8..6b40ea2d9cc 100644 --- a/windows/hook.c +++ b/windows/hook.c @@ -18,6 +18,7 @@ #include "wine/winuser16.h" #include "wine/winbase16.h" #include "hook.h" +#include "win.h" #include "queue.h" #include "task.h" #include "user.h" @@ -977,6 +978,7 @@ static LRESULT HOOK_CallHook( HANDLE16 hook, INT fromtype, INT code, HANDLE16 prevHook; HOOKDATA *data = (HOOKDATA *)USER_HEAP_LIN_ADDR(hook); LRESULT ret; + int iWndsLocks; WPARAM wParamOrig = wParam; LPARAM lParamOrig = lParam; @@ -999,6 +1001,9 @@ static LRESULT HOOK_CallHook( HANDLE16 hook, INT fromtype, INT code, TRACE(hook, "Calling hook %04x: %d %08x %08lx\n", hook, code, wParam, lParam ); + /* Suspend window structure locks before calling user code */ + iWndsLocks = WIN_SuspendWndsLock(); + ret = data->proc(code, wParam, lParam); /* Grrr. While the hook procedure is supposed to have an LRESULT return @@ -1010,6 +1015,8 @@ static LRESULT HOOK_CallHook( HANDLE16 hook, INT fromtype, INT code, && data->id != WH_JOURNALPLAYBACK ) ret = LOWORD( ret ); + WIN_RestoreWndsLock(iWndsLocks); + TRACE(hook, "Ret hook %04x = %08lx\n", hook, ret ); data->flags &= ~HOOK_INUSE; -- GitLab