diff options
| author | Julian Andres Klode <jak@debian.org> | 2026-05-01 16:12:11 +0000 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2026-05-01 16:12:11 +0000 |
| commit | 008936877d805ee2c1b7c8f6d22248bfdce4d05b (patch) | |
| tree | 8304452c120d49c678b19f624a165f8b8ff5245f /apt-pkg/acquire-item.cc | |
| parent | 9727b9faf3e033cd9c1c3fbd57df7017faf3cd5e (diff) | |
| parent | 244bf4d107d7f17eb7a21b036717a161618387ae (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.cc | 18 |
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) |
