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:
Ingo Weinhold
2013-04-04 22:25:23 +02:00
parent 6d04dfb7a9
commit ce1d048183
3 changed files with 4 additions and 25 deletions
@@ -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;