package daemon: Move volume change counter back to Volume

This commit is contained in:
Ingo Weinhold
2014-05-04 20:59:01 +02:00
parent 0e45e3eb1d
commit 870e93acf8
5 changed files with 16 additions and 19 deletions
@@ -98,7 +98,7 @@ CommitTransactionHandler::HandleRequest(
const BActivationTransaction& transaction, BMessage* reply) const BActivationTransaction& transaction, BMessage* reply)
{ {
// check the change count // check the change count
if (transaction.ChangeCount() != fVolumeState->ChangeCount()) if (transaction.ChangeCount() != fVolume->ChangeCount())
throw Exception(B_DAEMON_CHANGE_COUNT_MISMATCH); throw Exception(B_DAEMON_CHANGE_COUNT_MISMATCH);
// collect the packages to deactivate // collect the packages to deactivate
+10 -6
View File
@@ -145,6 +145,7 @@ Volume::Volume(BLooper* looper)
fPackageFileManager(NULL), fPackageFileManager(NULL),
fLatestState(NULL), fLatestState(NULL),
fActiveState(NULL), fActiveState(NULL),
fChangeCount(0),
fLock("volume"), fLock("volume"),
fPendingNodeMonitorEventsLock("pending node monitor events"), fPendingNodeMonitorEventsLock("pending node monitor events"),
fPendingNodeMonitorEvents(), fPendingNodeMonitorEvents(),
@@ -450,7 +451,7 @@ Volume::HandleGetLocationInfoRequest(BMessage* message)
// If the cached reply message is up-to-date, just send it. // If the cached reply message is up-to-date, just send it.
int64 changeCount; int64 changeCount;
if (fLocationInfoReply.FindInt64("change count", &changeCount) == B_OK if (fLocationInfoReply.FindInt64("change count", &changeCount) == B_OK
&& changeCount == fLatestState->ChangeCount()) { && changeCount == fChangeCount) {
locker.Unlock(); locker.Unlock();
message->SendReply(&fLocationInfoReply, (BHandler*)NULL, message->SendReply(&fLocationInfoReply, (BHandler*)NULL,
kCommunicationTimeout); kCommunicationTimeout);
@@ -484,10 +485,8 @@ Volume::HandleGetLocationInfoRequest(BMessage* message)
} }
} }
if (fLocationInfoReply.AddInt64("change count", fLatestState->ChangeCount()) if (fLocationInfoReply.AddInt64("change count", fChangeCount) != B_OK)
!= B_OK) {
return; return;
}
locker.Unlock(); locker.Unlock();
@@ -756,8 +755,7 @@ Volume::CreateTransaction(BPackageInstallationLocation location,
} }
// init the transaction // init the transaction
error = _transaction.SetTo(location, fLatestState->ChangeCount(), error = _transaction.SetTo(location, fChangeCount, directoryName);
directoryName);
if (error != B_OK) { if (error != B_OK) {
BEntry entry; BEntry entry;
_transactionDirectory.GetEntry(&entry); _transactionDirectory.GetEntry(&entry);
@@ -909,6 +907,7 @@ INFORM("Volume::_PackagesEntryCreated(\"%s\")\n", name);
fLock.Lock(); fLock.Lock();
fLatestState->AddPackage(package); fLatestState->AddPackage(package);
fChangeCount++;
fLock.Unlock(); fLock.Unlock();
try { try {
@@ -944,6 +943,7 @@ INFORM("Volume::_PackagesEntryRemoved(\"%s\")\n", name);
if (!package->IsActive()) { if (!package->IsActive()) {
AutoLocker<BLocker> locker(fLock); AutoLocker<BLocker> locker(fLock);
fLatestState->RemovePackage(package); fLatestState->RemovePackage(package);
fChangeCount++;
delete package; delete package;
return; return;
} }
@@ -979,6 +979,7 @@ Volume::_ReadPackagesDirectory()
if (error == B_OK) { if (error == B_OK) {
AutoLocker<BLocker> locker(fLock); AutoLocker<BLocker> locker(fLock);
fLatestState->AddPackage(package); fLatestState->AddPackage(package);
fChangeCount++;
} }
} }
@@ -1001,6 +1002,7 @@ Volume::_InitLatestState()
= fLatestState->ByFileNameIterator(); = fLatestState->ByFileNameIterator();
Package* package = it.Next();) { Package* package = it.Next();) {
fLatestState->SetPackageActive(package, true); fLatestState->SetPackageActive(package, true);
fChangeCount++;
} }
return B_OK; return B_OK;
@@ -1079,6 +1081,7 @@ Volume::_InitLatestStateFromActivatedPackages()
Package* package = fLatestState->FindPackage(packageName); Package* package = fLatestState->FindPackage(packageName);
if (package != NULL) { if (package != NULL) {
fLatestState->SetPackageActive(package, true); fLatestState->SetPackageActive(package, true);
fChangeCount++;
} else { } else {
WARN("Package \"%s\" from activation file not in packages " WARN("Package \"%s\" from activation file not in packages "
"directory.\n", packageName); "directory.\n", packageName);
@@ -1226,6 +1229,7 @@ Volume::_SetLatestState(VolumeState* state, bool isActive)
delete fLatestState; delete fLatestState;
fLatestState = state; fLatestState = state;
fChangeCount++;
} }
+4
View File
@@ -111,6 +111,9 @@ public:
void SetRoot(Root* root) void SetRoot(Root* root)
{ fRoot = root; } { fRoot = root; }
int64 ChangeCount() const
{ return fChangeCount; }
PackageFileNameHashTable::Iterator PackagesByFileNameIterator() PackageFileNameHashTable::Iterator PackagesByFileNameIterator()
const; const;
@@ -183,6 +186,7 @@ private:
PackageFileManager* fPackageFileManager; PackageFileManager* fPackageFileManager;
VolumeState* fLatestState; VolumeState* fLatestState;
VolumeState* fActiveState; VolumeState* fActiveState;
int64 fChangeCount;
BLocker fLock; BLocker fLock;
BLocker fPendingNodeMonitorEventsLock; BLocker fPendingNodeMonitorEventsLock;
NodeMonitorEventList fPendingNodeMonitorEvents; NodeMonitorEventList fPendingNodeMonitorEvents;
+1 -8
View File
@@ -16,8 +16,7 @@
VolumeState::VolumeState() VolumeState::VolumeState()
: :
fPackagesByFileName(), fPackagesByFileName(),
fPackagesByNodeRef(), fPackagesByNodeRef()
fChangeCount(0)
{ {
} }
@@ -48,7 +47,6 @@ VolumeState::AddPackage(Package* package)
{ {
fPackagesByFileName.Insert(package); fPackagesByFileName.Insert(package);
fPackagesByNodeRef.Insert(package); fPackagesByNodeRef.Insert(package);
fChangeCount++;
} }
@@ -57,7 +55,6 @@ VolumeState::RemovePackage(Package* package)
{ {
fPackagesByFileName.Remove(package); fPackagesByFileName.Remove(package);
fPackagesByNodeRef.Remove(package); fPackagesByNodeRef.Remove(package);
fChangeCount++;
} }
@@ -65,7 +62,6 @@ void
VolumeState::SetPackageActive(Package* package, bool active) VolumeState::SetPackageActive(Package* package, bool active)
{ {
package->SetActive(active); package->SetActive(active);
fChangeCount++;
} }
@@ -76,7 +72,6 @@ VolumeState::ActivationChanged(const PackageSet& activatedPackage,
for (PackageSet::iterator it = activatedPackage.begin(); for (PackageSet::iterator it = activatedPackage.begin();
it != activatedPackage.end(); ++it) { it != activatedPackage.end(); ++it) {
(*it)->SetActive(true); (*it)->SetActive(true);
fChangeCount++;
} }
for (PackageSet::iterator it = deactivatePackages.begin(); for (PackageSet::iterator it = deactivatePackages.begin();
@@ -105,7 +100,5 @@ VolumeState::Clone() const
clone->AddPackage(clonedPackage); clone->AddPackage(clonedPackage);
} }
clone->fChangeCount = fChangeCount;
return cloneDeleter.Detach(); return cloneDeleter.Detach();
} }
-4
View File
@@ -19,9 +19,6 @@ public:
bool Init(); bool Init();
int64 ChangeCount() const
{ return fChangeCount; }
Package* FindPackage(const char* name) const; Package* FindPackage(const char* name) const;
Package* FindPackage(const node_ref& nodeRef) const; Package* FindPackage(const node_ref& nodeRef) const;
@@ -45,7 +42,6 @@ private:
private: private:
PackageFileNameHashTable fPackagesByFileName; PackageFileNameHashTable fPackagesByFileName;
PackageNodeRefHashTable fPackagesByNodeRef; PackageNodeRefHashTable fPackagesByNodeRef;
int64 fChangeCount;
}; };