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)) {