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:
Ingo Weinhold
2013-10-24 23:12:59 +02:00
parent c52c444c27
commit a6cf8e1c4e
+17 -2
View File
@@ -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;