Free all allocated memory in ObpDeleteObject. Modified: trunk/reactos/ntoskrnl/ob/object.c _____
Modified: trunk/reactos/ntoskrnl/ob/object.c --- trunk/reactos/ntoskrnl/ob/object.c 2005-05-21 12:11:54 UTC (rev 15452) +++ trunk/reactos/ntoskrnl/ob/object.c 2005-05-21 12:19:26 UTC (rev 15453) @@ -801,21 +801,30 @@
KEBUGCHECK(0); }
+ if (Header->ObjectType != NULL && + Header->ObjectType->TypeInfo.DeleteProcedure != NULL) + { + Header->ObjectType->TypeInfo.DeleteProcedure(HEADER_TO_BODY(Header)); + } + if (Header->SecurityDescriptor != NULL) { ObpRemoveSecurityDescriptor(Header->SecurityDescriptor); }
- if (Header->NameInfo && Header->NameInfo->Name.Buffer) - { - ExFreePool(Header->NameInfo->Name.Buffer); - } - - if (Header->ObjectType != NULL && - Header->ObjectType->TypeInfo.DeleteProcedure != NULL) + if (Header->NameInfo) { - Header->ObjectType->TypeInfo.DeleteProcedure(HEADER_TO_BODY(Header)); + if(Header->NameInfo->Name.Buffer) + { + ExFreePool(Header->NameInfo->Name.Buffer); + } + ExFreePool(Header->NameInfo); } + if (Header->ObjectCreateInfo) + { + ObpReleaseCapturedAttributes(Header->ObjectCreateInfo); + ExFreePool(Header->ObjectCreateInfo); + }
DPRINT("ObPerformRetentionChecks() = Freeing object\n"); ExFreePool(Header);