Fix race conditions.


svn path=/branches/ntvdm/; revision=61230
This commit is contained in:
Aleksandar Andrejevic 2013-12-06 04:51:47 +00:00
parent 1b784a5b7b
commit 0f83939238

View file

@ -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 ***********************************************************/