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.
This commit is contained in:
@@ -175,11 +175,12 @@ PackageLinkDirectory::_Update(PackageLinksListener* listener)
|
|||||||
// Always remove all dependency links -- if there's still a package, they
|
// Always remove all dependency links -- if there's still a package, they
|
||||||
// will be re-created below.
|
// will be re-created below.
|
||||||
while (DependencyLink* link = fDependencyLinks.RemoveHead()) {
|
while (DependencyLink* link = fDependencyLinks.RemoveHead()) {
|
||||||
NodeWriteLocker selfLinkLocker(link);
|
NodeWriteLocker linkLocker(link);
|
||||||
if (listener != NULL)
|
if (listener != NULL)
|
||||||
listener->PackageLinkNodeRemoved(link);
|
listener->PackageLinkNodeRemoved(link);
|
||||||
|
|
||||||
RemoveChild(link);
|
RemoveChild(link);
|
||||||
|
linkLocker.Unlock();
|
||||||
link->ReleaseReference();
|
link->ReleaseReference();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,6 +194,7 @@ PackageLinkDirectory::_Update(PackageLinksListener* listener)
|
|||||||
listener->PackageLinkNodeRemoved(fSelfLink);
|
listener->PackageLinkNodeRemoved(fSelfLink);
|
||||||
|
|
||||||
RemoveChild(fSelfLink);
|
RemoveChild(fSelfLink);
|
||||||
|
selfLinkLocker.Unlock();
|
||||||
fSelfLink->ReleaseReference();
|
fSelfLink->ReleaseReference();
|
||||||
fSelfLink = NULL;
|
fSelfLink = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user