From 870e93acf88329489473abf19e0471454ff9dd2e Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 1 May 2014 23:35:01 +0200 Subject: [PATCH] package daemon: Move volume change counter back to Volume --- src/servers/package/CommitTransactionHandler.cpp | 2 +- src/servers/package/Volume.cpp | 16 ++++++++++------ src/servers/package/Volume.h | 4 ++++ src/servers/package/VolumeState.cpp | 9 +-------- src/servers/package/VolumeState.h | 4 ---- 5 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/servers/package/CommitTransactionHandler.cpp b/src/servers/package/CommitTransactionHandler.cpp index 8e738b55a0..780256d00f 100644 --- a/src/servers/package/CommitTransactionHandler.cpp +++ b/src/servers/package/CommitTransactionHandler.cpp @@ -98,7 +98,7 @@ CommitTransactionHandler::HandleRequest( const BActivationTransaction& transaction, BMessage* reply) { // check the change count - if (transaction.ChangeCount() != fVolumeState->ChangeCount()) + if (transaction.ChangeCount() != fVolume->ChangeCount()) throw Exception(B_DAEMON_CHANGE_COUNT_MISMATCH); // collect the packages to deactivate diff --git a/src/servers/package/Volume.cpp b/src/servers/package/Volume.cpp index 15787ca698..9b0822c64c 100644 --- a/src/servers/package/Volume.cpp +++ b/src/servers/package/Volume.cpp @@ -145,6 +145,7 @@ Volume::Volume(BLooper* looper) fPackageFileManager(NULL), fLatestState(NULL), fActiveState(NULL), + fChangeCount(0), fLock("volume"), fPendingNodeMonitorEventsLock("pending node monitor events"), fPendingNodeMonitorEvents(), @@ -450,7 +451,7 @@ Volume::HandleGetLocationInfoRequest(BMessage* message) // If the cached reply message is up-to-date, just send it. int64 changeCount; if (fLocationInfoReply.FindInt64("change count", &changeCount) == B_OK - && changeCount == fLatestState->ChangeCount()) { + && changeCount == fChangeCount) { locker.Unlock(); message->SendReply(&fLocationInfoReply, (BHandler*)NULL, kCommunicationTimeout); @@ -484,10 +485,8 @@ Volume::HandleGetLocationInfoRequest(BMessage* message) } } - if (fLocationInfoReply.AddInt64("change count", fLatestState->ChangeCount()) - != B_OK) { + if (fLocationInfoReply.AddInt64("change count", fChangeCount) != B_OK) return; - } locker.Unlock(); @@ -756,8 +755,7 @@ Volume::CreateTransaction(BPackageInstallationLocation location, } // init the transaction - error = _transaction.SetTo(location, fLatestState->ChangeCount(), - directoryName); + error = _transaction.SetTo(location, fChangeCount, directoryName); if (error != B_OK) { BEntry entry; _transactionDirectory.GetEntry(&entry); @@ -909,6 +907,7 @@ INFORM("Volume::_PackagesEntryCreated(\"%s\")\n", name); fLock.Lock(); fLatestState->AddPackage(package); + fChangeCount++; fLock.Unlock(); try { @@ -944,6 +943,7 @@ INFORM("Volume::_PackagesEntryRemoved(\"%s\")\n", name); if (!package->IsActive()) { AutoLocker locker(fLock); fLatestState->RemovePackage(package); + fChangeCount++; delete package; return; } @@ -979,6 +979,7 @@ Volume::_ReadPackagesDirectory() if (error == B_OK) { AutoLocker locker(fLock); fLatestState->AddPackage(package); + fChangeCount++; } } @@ -1001,6 +1002,7 @@ Volume::_InitLatestState() = fLatestState->ByFileNameIterator(); Package* package = it.Next();) { fLatestState->SetPackageActive(package, true); + fChangeCount++; } return B_OK; @@ -1079,6 +1081,7 @@ Volume::_InitLatestStateFromActivatedPackages() Package* package = fLatestState->FindPackage(packageName); if (package != NULL) { fLatestState->SetPackageActive(package, true); + fChangeCount++; } else { WARN("Package \"%s\" from activation file not in packages " "directory.\n", packageName); @@ -1226,6 +1229,7 @@ Volume::_SetLatestState(VolumeState* state, bool isActive) delete fLatestState; fLatestState = state; + fChangeCount++; } diff --git a/src/servers/package/Volume.h b/src/servers/package/Volume.h index 305ee68b1f..a76cd8b50c 100644 --- a/src/servers/package/Volume.h +++ b/src/servers/package/Volume.h @@ -111,6 +111,9 @@ public: void SetRoot(Root* root) { fRoot = root; } + int64 ChangeCount() const + { return fChangeCount; } + PackageFileNameHashTable::Iterator PackagesByFileNameIterator() const; @@ -183,6 +186,7 @@ private: PackageFileManager* fPackageFileManager; VolumeState* fLatestState; VolumeState* fActiveState; + int64 fChangeCount; BLocker fLock; BLocker fPendingNodeMonitorEventsLock; NodeMonitorEventList fPendingNodeMonitorEvents; diff --git a/src/servers/package/VolumeState.cpp b/src/servers/package/VolumeState.cpp index 73bfdb0184..2d3cc69f8c 100644 --- a/src/servers/package/VolumeState.cpp +++ b/src/servers/package/VolumeState.cpp @@ -16,8 +16,7 @@ VolumeState::VolumeState() : fPackagesByFileName(), - fPackagesByNodeRef(), - fChangeCount(0) + fPackagesByNodeRef() { } @@ -48,7 +47,6 @@ VolumeState::AddPackage(Package* package) { fPackagesByFileName.Insert(package); fPackagesByNodeRef.Insert(package); - fChangeCount++; } @@ -57,7 +55,6 @@ VolumeState::RemovePackage(Package* package) { fPackagesByFileName.Remove(package); fPackagesByNodeRef.Remove(package); - fChangeCount++; } @@ -65,7 +62,6 @@ void VolumeState::SetPackageActive(Package* package, bool active) { package->SetActive(active); - fChangeCount++; } @@ -76,7 +72,6 @@ VolumeState::ActivationChanged(const PackageSet& activatedPackage, for (PackageSet::iterator it = activatedPackage.begin(); it != activatedPackage.end(); ++it) { (*it)->SetActive(true); - fChangeCount++; } for (PackageSet::iterator it = deactivatePackages.begin(); @@ -105,7 +100,5 @@ VolumeState::Clone() const clone->AddPackage(clonedPackage); } - clone->fChangeCount = fChangeCount; - return cloneDeleter.Detach(); } diff --git a/src/servers/package/VolumeState.h b/src/servers/package/VolumeState.h index ebd0f4a069..829ee07356 100644 --- a/src/servers/package/VolumeState.h +++ b/src/servers/package/VolumeState.h @@ -19,9 +19,6 @@ public: bool Init(); - int64 ChangeCount() const - { return fChangeCount; } - Package* FindPackage(const char* name) const; Package* FindPackage(const node_ref& nodeRef) const; @@ -45,7 +42,6 @@ private: private: PackageFileNameHashTable fPackagesByFileName; PackageNodeRefHashTable fPackagesByNodeRef; - int64 fChangeCount; };