package daemon: Fix error handling of manually added packages
Since we don't move those packages out of the "packages" directory, we don't want to remove their respective object from the hash tables either. Fixes #10102.
This commit is contained in:
@@ -114,7 +114,7 @@ struct Volume::CommitTransactionHandler {
|
||||
const PackageSet& packagesAlreadyRemoved)
|
||||
:
|
||||
fVolume(volume),
|
||||
fPackagesToActivate(20, true),
|
||||
fPackagesToActivate(),
|
||||
fPackagesToDeactivate(),
|
||||
fAddedPackages(),
|
||||
fRemovedPackages(),
|
||||
@@ -126,6 +126,20 @@ struct Volume::CommitTransactionHandler {
|
||||
{
|
||||
}
|
||||
|
||||
~CommitTransactionHandler()
|
||||
{
|
||||
// Delete Package objects we created in case of error (on success
|
||||
// fPackagesToActivate will be empty).
|
||||
int32 count = fPackagesToActivate.CountItems();
|
||||
for (int32 i = 0; i < count; i++) {
|
||||
Package* package = fPackagesToActivate.ItemAt(i);
|
||||
if (fPackagesAlreadyAdded.find(package)
|
||||
== fPackagesAlreadyAdded.end()) {
|
||||
delete package;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HandleRequest(BMessage* request, BMessage* reply)
|
||||
{
|
||||
status_t error;
|
||||
@@ -959,13 +973,14 @@ private:
|
||||
it != fAddedPackages.end(); ++it) {
|
||||
// remove package from the volume
|
||||
Package* package = *it;
|
||||
fVolume->_RemovePackage(package);
|
||||
|
||||
if (fPackagesAlreadyAdded.find(package)
|
||||
!= fPackagesAlreadyAdded.end()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
fVolume->_RemovePackage(package);
|
||||
|
||||
if (transactionDirectory.InitCheck() != B_OK)
|
||||
continue;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user