fixed a memory leak in RegDeleteTree() that could be caused when two threads attempt to delete the same tree simultaneously
Modified: trunk/reactos/lib/advapi32/reg/reg.c

Modified: trunk/reactos/lib/advapi32/reg/reg.c
--- trunk/reactos/lib/advapi32/reg/reg.c	2005-10-03 21:40:58 UTC (rev 18253)
+++ trunk/reactos/lib/advapi32/reg/reg.c	2005-10-03 22:46:49 UTC (rev 18254)
@@ -1466,7 +1466,15 @@
                 }
                 else if (Status2 == STATUS_NO_MORE_ENTRIES)
                 {
-                    ASSERT(newDelKeys == NULL);
+                    /* in some race conditions where another thread would delete
+                       the same tree at the same time, newDelKeys could actually
+                       be != NULL! */
+                    if (newDelKeys != NULL)
+                    {
+                        RtlFreeHeap(ProcessHeap,
+                                    0,
+                                    newDelKeys);
+                    }
                     break;
                 }
 
@@ -1555,7 +1563,7 @@
                                    NULL);
 
         Status = NtOpenKey(&SubKeyHandle,
-                           DELETE | KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE,
+                           DELETE | KEY_ENUMERATE_SUB_KEYS,
                            &ObjectAttributes);
         if (!NT_SUCCESS(Status))
         {