Author: hbelusca
Date: Sat Dec 7 00:03:39 2013
New Revision: 61240
URL: http://svn.reactos.org/svn/reactos?rev=61240&view=rev
Log:
Fix my Engrish :)
Modified:
branches/ntvdm/subsystems/ntvdm/ps2.c
Modified: branches/ntvdm/subsystems/ntvdm/ps2.c
URL: http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/ps2.c?re…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/ps2.c [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/ps2.c [iso-8859-1] Sat Dec 7 00:03:39 2013
@@ -65,8 +65,8 @@
WaitForSingleObject(QueueMutex, INFINITE);
/*
- * Recheck whether keyboard queue is not empty (it may
- * have been changed after having grabbed the mutex).
+ * Recheck whether keyboard queue is not empty (it
+ * may have changed after having grabbed the mutex).
*/
if (KeyboardQueueEmpty)
{
Author: hbelusca
Date: Sat Dec 7 00:01:24 2013
New Revision: 61239
URL: http://svn.reactos.org/svn/reactos?rev=61239&view=rev
Log:
[NTVDM]
- Last race condition fix (see revision 61230).
- Add a comment why we do twice the same emptiness check (one before holding the mutex and one just after).
Modified:
branches/ntvdm/subsystems/ntvdm/ps2.c
Modified: branches/ntvdm/subsystems/ntvdm/ps2.c
URL: http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/ps2.c?re…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/ps2.c [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/ps2.c [iso-8859-1] Sat Dec 7 00:01:24 2013
@@ -31,10 +31,16 @@
static BOOLEAN KeyboardQueuePush(BYTE ScanCode)
{
+ BOOLEAN Result = TRUE;
+
+ WaitForSingleObject(QueueMutex, INFINITE);
+
/* Check if the keyboard queue is full */
- WaitForSingleObject(QueueMutex, INFINITE);
-
- if (!KeyboardQueueEmpty && (KeyboardQueueStart == KeyboardQueueEnd)) return FALSE;
+ if (!KeyboardQueueEmpty && (KeyboardQueueStart == KeyboardQueueEnd))
+ {
+ Result = FALSE;
+ goto Done;
+ }
/* Insert the value in the queue */
KeyboardQueue[KeyboardQueueEnd] = ScanCode;
@@ -44,19 +50,24 @@
/* Since we inserted a value, it's not empty anymore */
KeyboardQueueEmpty = FALSE;
+Done:
ReleaseMutex(QueueMutex);
- return TRUE;
+ return Result;
}
static BOOLEAN KeyboardQueuePop(BYTE *ScanCode)
{
BOOLEAN Result = TRUE;
- /* Make sure the keyboard queue is not empty */
+ /* Make sure the keyboard queue is not empty (fast check) */
if (KeyboardQueueEmpty) return FALSE;
WaitForSingleObject(QueueMutex, INFINITE);
+ /*
+ * Recheck whether keyboard queue is not empty (it may
+ * have been changed after having grabbed the mutex).
+ */
if (KeyboardQueueEmpty)
{
Result = FALSE;