From 53702a590c9905cf3104180fefcf126b26e3aad9 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 4 Nov 2014 14:47:59 +0100 Subject: Call "Dequeue()" for items in AbortTransaction() to fix race The pkgAcquire::Run() code works uses a while(ToFetch > 0) loop over the items queued for fetching. This means that we need to Deqeueue the item if we call AbortTransaction() to avoid a hang. --- apt-pkg/acquire-item.cc | 3 +++ apt-pkg/acquire-item.h | 2 ++ 2 files changed, 5 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index ba1669de0..f684e81f1 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -1547,7 +1547,10 @@ void pkgAcqMetaBase::AbortTransaction() std::clog << " Cancel: " << (*I)->DestFile << std::endl; // the transaction will abort, so stop anything that is idle if ((*I)->Status == pkgAcquire::Item::StatIdle) + { (*I)->Status = pkgAcquire::Item::StatDone; + (*I)->Dequeue(); + } } Transaction.clear(); } diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 4b4ef5fca..d6eca3e50 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -63,6 +63,8 @@ class pkgAcqMetaBase; */ class pkgAcquire::Item : public WeakPointable { + friend pkgAcqMetaBase; + void *d; protected: -- cgit v1.2.3