packagefs: Fix adding package links twice to volume
PackageLinkDirectory::NotifyDirectoryAdded() first notified the listener (Volume) about the directory itself, then about the links it contained. Since Volume adds the nodes recursively, the latter were added twice, resulting in a corrupted ID hash table.
This commit is contained in:
@@ -149,26 +149,6 @@ PackageLinkDirectory::UpdatePackageDependencies(Package* package,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
PackageLinkDirectory::NotifyDirectoryAdded(PackageLinksListener* listener)
|
||||
{
|
||||
NodeWriteLocker writeLocker(this);
|
||||
|
||||
listener->PackageLinkNodeAdded(this);
|
||||
|
||||
if (fSelfLink != NULL) {
|
||||
NodeWriteLocker selfLinkLocker(fSelfLink);
|
||||
listener->PackageLinkNodeAdded(fSelfLink);
|
||||
}
|
||||
|
||||
for (FamilyDependencyList::Iterator it = fDependencyLinks.GetIterator();
|
||||
DependencyLink* link = it.Next();) {
|
||||
NodeWriteLocker linkLocker(link);
|
||||
listener->PackageLinkNodeAdded(link);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
PackageLinkDirectory::_Update(PackageLinksListener* listener)
|
||||
{
|
||||
|
||||
@@ -32,9 +32,6 @@ public:
|
||||
void UpdatePackageDependencies(Package* package,
|
||||
PackageLinksListener* listener);
|
||||
|
||||
void NotifyDirectoryAdded(
|
||||
PackageLinksListener* listener);
|
||||
|
||||
bool IsEmpty() const
|
||||
{ return fPackages.IsEmpty(); }
|
||||
|
||||
|
||||
@@ -70,8 +70,10 @@ PackageLinksDirectory::AddPackage(Package* package)
|
||||
// No entry is in the way, so just add the link directory.
|
||||
AddChild(linkDirectory);
|
||||
|
||||
if (fListener != NULL)
|
||||
linkDirectory->NotifyDirectoryAdded(fListener);
|
||||
if (fListener != NULL) {
|
||||
NodeWriteLocker writeLocker(linkDirectory);
|
||||
fListener->PackageLinkNodeAdded(linkDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
return B_OK;
|
||||
|
||||
Reference in New Issue
Block a user