** Description changed:

  [Impact]
  System lock unrefing is broken, off-by-one error. Locking twice opens a 
second fd for the lock file, and the old fd gets lost and remains open for the 
remaining duration of the program
  
  [Test case]
- TODO
+ 
+ Executing the following script should show one lock file in the first
+ line, and none in the last line.
+ 
+ def maybe_readlink(path):
+   try:
+     return os.readlink("/proc/self/fd/" + p)
+   except:
+     return "<deleted>"
+ 
+ import os, apt_pkg
+ apt_pkg.init()
+ apt_pkg.pkgsystem_lock()
+ apt_pkg.pkgsystem_lock()
+ apt_pkg.pkgsystem_unlock()
+ apt_pkg.pkgsystem_unlock()
+ print([(p, maybe_readlink("/proc/self/fd/" + p)) for p in 
os.listdir("/proc/self/fd")])
+ 
+ 
+ [Test output]
+ good, cosmic:
+ [('0', '/dev/pts/2'), ('1', '/dev/pts/2'), ('2', '/dev/pts/2'), ('3', 
'/var/lib/dpkg/lock'), ('4', '<deleted>')]
+ [('0', '/dev/pts/2'), ('1', '/dev/pts/2'), ('2', '/dev/pts/2'), ('3', 
'<deleted>')]
+ 
+ bad, bionic:
+ [('0', '/dev/pts/0'), ('1', '/dev/pts/0'), ('2', '/dev/pts/0'), ('3', 
'pipe:[40889331]'), ('4', '/var/lib/dpkg/lock'), ('5', '/var/lib/dpkg/lock'), 
('6', '<deleted>'), ('17', 'socket:[53931]')]
+ [('0', '/dev/pts/0'), ('1', '/dev/pts/0'), ('2', '/dev/pts/0'), ('3', 
'pipe:[40889331]'), ('4', '/var/lib/dpkg/lock'), ('5', '<deleted>'), ('17', 
'socket:[53931]')]
+ 
  
  [Regression potential]
- TODO
+ A locking change can potentially break locking, but this one seems like an 
obvious off-by-one error.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1778547

Title:
  Broken system lock counting

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1778547/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to