xenial
======

With 1.2.27
-----------

root@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@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@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
Touch seeded packages, 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 <a...@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

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to