[Bug 1794053] Re: pkgCacheFile unlocks in destructor even if it did not acquire lock
Julian Andres Klode
1794053 at bugs.launchpad.net
Thu Oct 18 12:18:26 UTC 2018
xenial
======
With 1.2.27
-----------
root at glowing-mastodon:~# python3 a.py
total 0
[...]
lrwx------ 1 root root 64 Oct 18 12:15 3 -> /var/lib/dpkg/lock
l-wx------ 1 root root 64 Oct 18 12:15 6 -> pipe:[27632799]
Reading package lists... Done
Building dependency tree
Reading state information... Done
total 0
[...]
l-wx------ 1 root root 64 Oct 18 12:15 6 -> pipe:[27632799]
Traceback (most recent call last):
File "a.py", line 13, in <module>
apt_pkg.pkgsystem_unlock()
SystemError: E:Not locked
=> broken as expected
With 1.2.29
-----------
root at glowing-mastodon:~# python3 a.py
total 0
[...]
lrwx------ 1 root root 64 Oct 18 12:17 3 -> /var/lib/dpkg/lock-frontend
lrwx------ 1 root root 64 Oct 18 12:17 4 -> /var/lib/dpkg/lock
l-wx------ 1 root root 64 Oct 18 12:17 6 -> pipe:[27632799]
Reading package lists... Done
Building dependency tree
Reading state information... Done
total 0
[...]
lrwx------ 1 root root 64 Oct 18 12:17 3 -> /var/lib/dpkg/lock-frontend
lrwx------ 1 root root 64 Oct 18 12:17 4 -> /var/lib/dpkg/lock
l-wx------ 1 root root 64 Oct 18 12:17 6 -> pipe:[27632799]
root at glowing-mastodon:~#
=> lock is still held at second ls, and releasing it worked fine.
** Tags removed: verification-needed verification-needed-xenial
** Tags added: verification-done verification-done-xenial
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to apt in Ubuntu.
https://bugs.launchpad.net/bugs/1794053
Title:
pkgCacheFile unlocks in destructor even if it did not acquire lock
Status in apt package in Ubuntu:
Fix Released
Status in apt source package in Trusty:
Triaged
Status in apt source package in Xenial:
Fix Committed
Status in apt source package in Bionic:
Fix Committed
Status in apt source package in Cosmic:
Fix Released
Bug description:
[Impact]
Closing a cache file unlocks the system (loses the lock). This randomly breaks ubuntu-make, for example.
[Test case]
The following Python code fails, but should succeed, as it locks first, opens a cache and closes it, and then unlocks.
import apt_pkg, os, gc
apt_pkg.init()
apt_pkg.pkgsystem_lock()
os.system("ls -l /proc/%d/fd" % os.getpid())
apt_pkg.Cache()
gc.collect()
os.system("ls -l /proc/%d/fd" % os.getpid())
apt_pkg.pkgsystem_unlock()
[Regression potential]
This fixes a regression introduced in 2001 by
commit b2e465d6d32d2dc884f58b94acb7e35f671a87fe
Author: Arch Librarian <arch at canonical.com>
Date: Mon Sep 20 16:56:32 2004 +0000
Join with aliencode
Author: jgg
Date: 2001-02-20 07:03:16 GMT
Join with aliencode
The fix is to only UnLock from the cache file if the cache file locked
before. It's unclear how far code relies on that regression. That
said, any potential regression should be easily noticable, as it would
be a case of not unlocking where we were unlocking before.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1794053/+subscriptions
More information about the foundations-bugs
mailing list