summaryrefslogtreecommitdiff
path: root/apt-pkg/acquire-item.cc
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2026-05-01 16:12:11 +0000
committerJulian Andres Klode <jak@debian.org>2026-05-01 16:12:11 +0000
commit008936877d805ee2c1b7c8f6d22248bfdce4d05b (patch)
tree8304452c120d49c678b19f624a165f8b8ff5245f /apt-pkg/acquire-item.cc
parent9727b9faf3e033cd9c1c3fbd57df7017faf3cd5e (diff)
parent244bf4d107d7f17eb7a21b036717a161618387ae (diff)
Merge branch 'apt-update-stuck' into 'main'
Fix issues that can lead to "apt update" being stuck with outdated lists See merge request apt-team/apt!559
Diffstat (limited to 'apt-pkg/acquire-item.cc')
-rw-r--r--apt-pkg/acquire-item.cc18
1 files changed, 16 insertions, 2 deletions
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index 21ed7b242..b77bccc9d 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -870,6 +870,10 @@ std::string pkgAcquire::Item::ShortDesc() const /*{{{*/
return DescURI();
}
/*}}}*/
+void pkgAcquire::Item::Cancelled() /*{{{*/
+{
+}
+ /*}}}*/
void pkgAcquire::Item::Finished() /*{{{*/
{
}
@@ -1334,7 +1338,7 @@ void pkgAcqMetaBase::CommitTransaction()
switch (TransactionManager->State)
{
case TransactionStarted: break;
- case TransactionAbort: _error->Fatal("Transaction %s was already committed and is now aborted", TransactionManager->Target.URI.c_str()); return;
+ case TransactionAbort: _error->Fatal("Transaction %s was already aborted and is now committed", TransactionManager->Target.URI.c_str()); return;
case TransactionCommit: _error->Fatal("Transaction %s was already committed and is again committed", TransactionManager->Target.URI.c_str()); return;
}
TransactionManager->State = TransactionCommit;
@@ -1344,8 +1348,12 @@ void pkgAcqMetaBase::CommitTransaction()
for (std::vector<pkgAcqTransactionItem*>::iterator I = Transaction.begin();
I != Transaction.end(); ++I)
{
- (*I)->TransactionState(TransactionCommit);
+ if (*I != this)
+ (*I)->TransactionState(TransactionCommit);
}
+ // commit ourselves last to not end up with fresh InRelease
+ // that doesn't match other files when killed mid-commit
+ TransactionState(TransactionCommit);
Transaction.clear();
}
/*}}}*/
@@ -2006,6 +2014,12 @@ string pkgAcqMetaClearSig::Custom600Headers() const
return Header;
}
/*}}}*/
+void pkgAcqMetaClearSig::Cancelled() /*{{{*/
+{
+ if (TransactionManager->State == TransactionStarted)
+ TransactionManager->AbortTransaction();
+}
+ /*}}}*/
void pkgAcqMetaClearSig::Finished() /*{{{*/
{
if(_config->FindB("Debug::Acquire::Transaction", false) == true)