Author: tkreuzer
Date: Mon Nov 18 15:21:53 2013
New Revision: 61039

URL: http://svn.reactos.org/svn/reactos?rev=61039&view=rev
Log:
[NTOSKRNL]
Implement RtlpCloseHandleCallback, closing the handle table, and use it as 
callback for ExSweepHandleTable in RtlpDestroyAtomHandleTable. Without a 
callback ExSweepHandleTable simply crashes, so obviously we never clean up any 
atom tables, possibly because the window station is never closed.

Modified:
    trunk/reactos/ntoskrnl/rtl/libsupp.c

Modified: trunk/reactos/ntoskrnl/rtl/libsupp.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/rtl/libsupp.c?rev=61039&r1=61038&r2=61039&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/rtl/libsupp.c        [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/rtl/libsupp.c        [iso-8859-1] Mon Nov 18 
15:21:53 2013
@@ -535,14 +535,25 @@
    return (AtomTable->ExHandleTable != NULL);
 }
 
+BOOLEAN
+NTAPI
+RtlpCloseHandleCallback(
+    IN PHANDLE_TABLE_ENTRY HandleTableEntry,
+    IN HANDLE Handle,
+    IN PVOID HandleTable)
+{
+    /* Destroy and unlock the handle entry */
+    return ExDestroyHandle(HandleTable, Handle, HandleTableEntry);
+}
+
 VOID
 RtlpDestroyAtomHandleTable(PRTL_ATOM_TABLE AtomTable)
 {
    if (AtomTable->ExHandleTable)
    {
       ExSweepHandleTable(AtomTable->ExHandleTable,
-                         NULL,
-                         NULL);
+                         RtlpCloseHandleCallback,
+                         AtomTable->ExHandleTable);
       ExDestroyHandleTable(AtomTable->ExHandleTable, NULL);
       AtomTable->ExHandleTable = NULL;
    }


Reply via email to