diff --git a/subsystems/ntvdm/ps2.c b/subsystems/ntvdm/ps2.c index d2f9997bede..07c3fc71c29 100644 --- a/subsystems/ntvdm/ps2.c +++ b/subsystems/ntvdm/ps2.c @@ -32,10 +32,10 @@ static HANDLE InputThread = NULL; static BOOLEAN KeyboardQueuePush(BYTE ScanCode) { /* Check if the keyboard queue is full */ - if (!KeyboardQueueEmpty && (KeyboardQueueStart == KeyboardQueueEnd)) return FALSE; - WaitForSingleObject(QueueMutex, INFINITE); + if (!KeyboardQueueEmpty && (KeyboardQueueStart == KeyboardQueueEnd)) return FALSE; + /* Insert the value in the queue */ KeyboardQueue[KeyboardQueueEnd] = ScanCode; KeyboardQueueEnd++; @@ -50,11 +50,19 @@ static BOOLEAN KeyboardQueuePush(BYTE ScanCode) static BOOLEAN KeyboardQueuePop(BYTE *ScanCode) { + BOOLEAN Result = TRUE; + /* Make sure the keyboard queue is not empty */ if (KeyboardQueueEmpty) return FALSE; WaitForSingleObject(QueueMutex, INFINITE); + if (KeyboardQueueEmpty) + { + Result = FALSE; + goto Done; + } + /* Get the scan code */ *ScanCode = KeyboardQueue[KeyboardQueueStart]; @@ -68,8 +76,9 @@ static BOOLEAN KeyboardQueuePop(BYTE *ScanCode) KeyboardQueueEmpty = TRUE; } +Done: ReleaseMutex(QueueMutex); - return TRUE; + return Result; } /* PUBLIC FUNCTIONS ***********************************************************/