Author: dgorbachev
Date: Tue Jan 22 22:41:31 2013
New Revision: 58202
URL: http://svn.reactos.org/svn/reactos?rev=58202&view=rev
Log:
[VGAFONTS]
Add bitmap font for code page 862. Hebrew glyphs are from X11 font
"Schumacher Clean" (see license below), modified by Baruch Rutman
(peterooch*at*gmail*dot*com). CORE-6912.
Copyright 1989 Dale Schumacher, dal(a)syntel.mn.org
399 Beacon Ave.
St. Paul, MN 55104-3527
Permission to use, copy, modify, and distribute this software and
its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all
copies and that both that copyright notice and this permission
notice appear in supporting documentation, and that the name of
Dale Schumacher not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission. Dale Schumacher makes no representations about the
suitability of this software for any purpose. It is provided "as
is" without express or implied warranty.
Added:
trunk/reactos/media/vgafonts/862-8x8.bin (with props)
Modified:
trunk/reactos/media/vgafonts/CMakeLists.txt
Added: trunk/reactos/media/vgafonts/862-8x8.bin
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/vgafonts/862-8x8.bin…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/media/vgafonts/862-8x8.bin
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: trunk/reactos/media/vgafonts/CMakeLists.txt
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/vgafonts/CMakeLists.…
==============================================================================
--- trunk/reactos/media/vgafonts/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/media/vgafonts/CMakeLists.txt [iso-8859-1] Tue Jan 22 22:41:31 2013
@@ -5,6 +5,7 @@
${CMAKE_CURRENT_SOURCE_DIR}/775-8x8.bin
${CMAKE_CURRENT_SOURCE_DIR}/850-8x8.bin
${CMAKE_CURRENT_SOURCE_DIR}/852-8x8.bin
+ ${CMAKE_CURRENT_SOURCE_DIR}/862-8x8.bin
${CMAKE_CURRENT_SOURCE_DIR}/865-8x8.bin
${CMAKE_CURRENT_SOURCE_DIR}/866-8x8.bin
${CMAKE_CURRENT_SOURCE_DIR}/932-8x8.bin
Author: tkreuzer
Date: Mon Jan 21 20:58:23 2013
New Revision: 58200
URL: http://svn.reactos.org/svn/reactos?rev=58200&view=rev
Log:
[NTOSKRNL]
Some keyed event fixes: disable APCs before acquiring the pushlock, close handle on exception, check if a wait was aborted and remove the wait list entry from the list in that case.
Modified:
trunk/reactos/ntoskrnl/ex/keyedevt.c
Modified: trunk/reactos/ntoskrnl/ex/keyedevt.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/keyedevt.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/ex/keyedevt.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ex/keyedevt.c [iso-8859-1] Mon Jan 21 20:58:23 2013
@@ -142,6 +142,7 @@
HashIndex %= NUM_KEY_HASH_BUCKETS;
/* Lock the lists */
+ KeEnterCriticalRegion();
ExAcquirePushLockExclusive(&KeyedEvent->HashTable[HashIndex].Lock);
/* Get the lists for search and wait, depending on whether
@@ -161,6 +162,10 @@
ListEntry = WaitListHead1->Flink;
while (ListEntry != WaitListHead1)
{
+ /* Get the waiting thread. Note that this thread cannot be terminated
+ as long as we hold the list lock, since it either needs to wait to
+ be signaled by this thread or, when the wait is aborted due to thread
+ termination, then it first needs to acquire the list lock. */
Thread = CONTAINING_RECORD(ListEntry, ETHREAD, KeyedWaitChain);
/* Check if this thread is a correct waiter */
@@ -170,11 +175,16 @@
/* Remove the thread from the list */
RemoveEntryList(&Thread->KeyedWaitChain);
+ /* Initialize the list entry to show that it was removed */
+ InitializeListHead(&Thread->KeyedWaitChain);
+
/* Wake the thread */
KeReleaseSemaphore(&Thread->KeyedWaitSemaphore, 0, 1, FALSE);
-
- /* Unlock the lists */
+ Thread = NULL;
+
+ /* Unlock the list. After this it is not safe to access Thread */
ExReleasePushLockExclusive(&KeyedEvent->HashTable[HashIndex].Lock);
+ KeLeaveCriticalRegion();
return STATUS_SUCCESS;
}
@@ -192,8 +202,9 @@
/* Insert the current thread into the secondary wait list */
InsertTailList(WaitListHead2, &CurrentThread->KeyedWaitChain);
- /* Unlock the lists */
+ /* Unlock the list */
ExReleasePushLockExclusive(&KeyedEvent->HashTable[HashIndex].Lock);
+ KeLeaveCriticalRegion();
/* Wait for the keyed wait semaphore */
Status = KeWaitForSingleObject(&CurrentThread->KeyedWaitSemaphore,
@@ -202,7 +213,26 @@
Alertable,
Timeout);
- return STATUS_SUCCESS;
+ /* Check if the wait was aborted or timed out */
+ if (Status != STATUS_SUCCESS)
+ {
+ /* Lock the lists to make sure no one else messes with the entry */
+ KeEnterCriticalRegion();
+ ExAcquirePushLockExclusive(&KeyedEvent->HashTable[HashIndex].Lock);
+
+ /* Check if the wait list entry is still in the list */
+ if (CurrentThread->KeyedWaitChain.Flink != &CurrentThread->KeyedWaitChain)
+ {
+ /* Remove the thread from the list */
+ RemoveEntryList(&CurrentThread->KeyedWaitChain);
+ }
+
+ /* Unlock the list */
+ ExReleasePushLockExclusive(&KeyedEvent->HashTable[HashIndex].Lock);
+ KeLeaveCriticalRegion();
+ }
+
+ return Status;
}
_IRQL_requires_max_(APC_LEVEL)
@@ -274,7 +304,7 @@
/* Check for success */
if (!NT_SUCCESS(Status)) return Status;
- /* Initalize the keyed event */
+ /* Initialize the keyed event */
ExpInitializeKeyedEvent(KeyedEvent);
/* Insert it */
@@ -353,6 +383,9 @@
{
/* Get the exception code */
Status = _SEH2_GetExceptionCode();
+
+ /* Cleanup */
+ ObCloseHandle(KeyedEventHandle, PreviousMode);
}
_SEH2_END;
}