package daemon: Move volume change counter back to Volume
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user