From c1ef23b188f363e95cc320103df70793a6fb3097 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 5 Nov 2011 17:20:45 +0100 Subject: [PATCH] PackageLinkDirectory::_Update(): Don't unlock after delete When using an AutoLocker on an object, the lock must be released explicitly before releasing the last certain reference to that object. --- .../kernel/file_systems/packagefs/PackageLinkDirectory.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp b/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp index c5e1b450e3..ce14ceb957 100644 --- a/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp @@ -175,11 +175,12 @@ PackageLinkDirectory::_Update(PackageLinksListener* listener) // Always remove all dependency links -- if there's still a package, they // will be re-created below. while (DependencyLink* link = fDependencyLinks.RemoveHead()) { - NodeWriteLocker selfLinkLocker(link); + NodeWriteLocker linkLocker(link); if (listener != NULL) listener->PackageLinkNodeRemoved(link); RemoveChild(link); + linkLocker.Unlock(); link->ReleaseReference(); } @@ -193,6 +194,7 @@ PackageLinkDirectory::_Update(PackageLinksListener* listener) listener->PackageLinkNodeRemoved(fSelfLink); RemoveChild(fSelfLink); + selfLinkLocker.Unlock(); fSelfLink->ReleaseReference(); fSelfLink = NULL; }