diff --git a/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp b/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp index baa68818f7..c5e1b450e3 100644 --- a/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp @@ -149,6 +149,26 @@ 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) { diff --git a/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.h b/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.h index 798592c243..c5adc7ff3d 100644 --- a/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.h +++ b/src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.h @@ -32,6 +32,9 @@ public: void UpdatePackageDependencies(Package* package, PackageLinksListener* listener); + void NotifyDirectoryAdded( + PackageLinksListener* listener); + bool IsEmpty() const { return fPackages.IsEmpty(); } diff --git a/src/add-ons/kernel/file_systems/packagefs/PackageLinksDirectory.cpp b/src/add-ons/kernel/file_systems/packagefs/PackageLinksDirectory.cpp index 6aa810969f..bbe09e9610 100644 --- a/src/add-ons/kernel/file_systems/packagefs/PackageLinksDirectory.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/PackageLinksDirectory.cpp @@ -70,10 +70,8 @@ PackageLinksDirectory::AddPackage(Package* package) // No entry is in the way, so just add the link directory. AddChild(linkDirectory); - if (fListener != NULL) { - NodeWriteLocker linkDirectoryWriteLocker(linkDirectory); - fListener->PackageLinkNodeAdded(linkDirectory); - } + if (fListener != NULL) + linkDirectory->NotifyDirectoryAdded(fListener); } return B_OK;