diff options
author | David Kalnischkies <david@kalnischkies.de> | 2015-12-23 17:48:16 +0100 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2015-12-23 17:48:16 +0100 |
commit | 8d968cc2d1e11da81f3bab878c1a413a97ca27ed (patch) | |
tree | 33c558f0a730625e15cca4d234207e7fc7cda465 | |
parent | b3db9d81325769fb9d9c6518f9d917f90328bef1 (diff) | |
download | apt-8d968cc2d1e11da81f3bab878c1a413a97ca27ed.tar.gz |
ensure we got a lock in clean operation
We try to acquired the locks, but we didn't stop if we failed to get it…
Closes: 808561
-rw-r--r-- | apt-private/private-download.cc | 8 | ||||
-rwxr-xr-x | test/integration/test-apt-get-clean | 10 |
2 files changed, 14 insertions, 4 deletions
diff --git a/apt-private/private-download.cc b/apt-private/private-download.cc index 5cdcf6038..6f672635f 100644 --- a/apt-private/private-download.cc +++ b/apt-private/private-download.cc @@ -309,16 +309,16 @@ bool DoClean(CommandLine &) } pkgAcquire Fetcher; - if (archivedir.empty() == false && FileExists(archivedir) == true) + if (archivedir.empty() == false && FileExists(archivedir) == true && + Fetcher.GetLock(archivedir) == true) { - Fetcher.GetLock(archivedir); Fetcher.Clean(archivedir); Fetcher.Clean(archivedir + "partial/"); } - if (listsdir.empty() == false && FileExists(listsdir) == true) + if (listsdir.empty() == false && FileExists(listsdir) == true && + Fetcher.GetLock(listsdir) == true) { - Fetcher.GetLock(listsdir); Fetcher.Clean(listsdir + "partial/"); } diff --git a/test/integration/test-apt-get-clean b/test/integration/test-apt-get-clean index 9d15cd826..6bf20c8d7 100755 --- a/test/integration/test-apt-get-clean +++ b/test/integration/test-apt-get-clean @@ -36,6 +36,16 @@ testfailure test -e rootdir/var/cache/apt/archives/foo_2_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_3_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_4_all.deb +if [ "$(id -u)" != '0' ]; then + msgmsg 'No clean if lock can not be acquired' + touch rootdir/var/cache/apt/archives/foo_4_all.deb + touch rootdir/var/cache/apt/archives/lock + chmod 444 rootdir/var/cache/apt/archives/lock + testfailure apt clean + testsuccess test -e rootdir/var/cache/apt/archives/foo_4_all.deb + chmod 644 rootdir/var/cache/apt/archives/lock +fi + directorygone() { rm -rf "$1" testsuccess apt autoclean |