From bfb695a0b4487de155fb798cf12a92d65d96c347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9=20van=20Geldorp?= Date: Mon, 8 Dec 2003 20:40:41 +0000 Subject: [PATCH] Introduce separate lock for hardware message list svn path=/trunk/; revision=6922 --- reactos/subsys/win32k/include/msgqueue.h | 2 ++ reactos/subsys/win32k/ntuser/msgqueue.c | 15 +++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/reactos/subsys/win32k/include/msgqueue.h b/reactos/subsys/win32k/include/msgqueue.h index 424b1a96605..ce5ef117a7d 100644 --- a/reactos/subsys/win32k/include/msgqueue.h +++ b/reactos/subsys/win32k/include/msgqueue.h @@ -45,6 +45,8 @@ typedef struct _USER_MESSAGE_QUEUE LIST_ENTRY NotifyMessagesListHead; /* Queue for hardware messages for the queue. */ LIST_ENTRY HardwareMessagesListHead; + /* Lock for the hardware message list. */ + FAST_MUTEX HardwareLock; /* Lock for the queue. */ FAST_MUTEX Lock; /* True if a WM_QUIT message is pending. */ diff --git a/reactos/subsys/win32k/ntuser/msgqueue.c b/reactos/subsys/win32k/ntuser/msgqueue.c index 6d3938f57c6..760807f35af 100644 --- a/reactos/subsys/win32k/ntuser/msgqueue.c +++ b/reactos/subsys/win32k/ntuser/msgqueue.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: msgqueue.c,v 1.40 2003/12/07 19:29:33 weiden Exp $ +/* $Id: msgqueue.c,v 1.41 2003/12/08 20:40:41 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -279,10 +279,10 @@ MsqTranslateMouseMessage(HWND hWnd, UINT FilterLow, UINT FilterHigh, if (Window->MessageQueue != PsGetWin32Thread()->MessageQueue) { - ExAcquireFastMutex(&Window->MessageQueue->Lock); + ExAcquireFastMutex(&Window->MessageQueue->HardwareLock); InsertTailList(&Window->MessageQueue->HardwareMessagesListHead, &Message->ListEntry); - ExReleaseFastMutex(&Window->MessageQueue->Lock); + ExReleaseFastMutex(&Window->MessageQueue->HardwareLock); KeSetEvent(&Window->MessageQueue->NewMessages, IO_NO_INCREMENT, FALSE); return(FALSE); } @@ -364,7 +364,7 @@ MsqPeekHardwareMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, DesktopWindow = IntGetWindowObject(IntGetDesktopWindow()); /* Process messages in the message queue itself. */ - ExAcquireFastMutex(&MessageQueue->Lock); + ExAcquireFastMutex(&MessageQueue->HardwareLock); CurrentEntry = MessageQueue->HardwareMessagesListHead.Flink; while (CurrentEntry != &MessageQueue->HardwareMessagesListHead) { @@ -384,14 +384,14 @@ MsqPeekHardwareMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, { RemoveEntryList(&Current->ListEntry); } - ExReleaseFastMutex(&MessageQueue->Lock); + ExReleaseFastMutex(&MessageQueue->HardwareLock); *Message = Current; IntReleaseWindowObject(DesktopWindow); return(TRUE); } } } - ExReleaseFastMutex(&MessageQueue->Lock); + ExReleaseFastMutex(&MessageQueue->HardwareLock); /* Now try the global queue. */ ExAcquireFastMutex(&HardwareMessageQueueLock); @@ -456,8 +456,10 @@ MsqPeekHardwareMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, */ if (!Remove) { + ExAcquireFastMutex(&MessageQueue->HardwareLock); InsertTailList(&MessageQueue->HardwareMessagesListHead, &Current->ListEntry); + ExReleaseFastMutex(&MessageQueue->HardwareLock); } ExReleaseFastMutex(&HardwareMessageQueueLock); *Message = Current; @@ -808,6 +810,7 @@ MsqInitializeMessageQueue(struct _ETHREAD *Thread, PUSER_MESSAGE_QUEUE MessageQu InitializeListHead(&MessageQueue->PostedMessagesListHead); InitializeListHead(&MessageQueue->SentMessagesListHead); InitializeListHead(&MessageQueue->HardwareMessagesListHead); + ExInitializeFastMutex(&MessageQueue->HardwareLock); ExInitializeFastMutex(&MessageQueue->Lock); MessageQueue->QuitPosted = FALSE; MessageQueue->QuitExitCode = 0;