Sorry, few typos in the script
** 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]
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>"
+ try:
+ return os.readlink(path)
+ 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]
A locking change can potentially break locking, but this one seems like an
obvious off-by-one error.
** 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]
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(path)
except:
return "<deleted>"
import os, apt_pkg
apt_pkg.init()
apt_pkg.pkgsystem_lock()
apt_pkg.pkgsystem_lock()
+ print([(p, maybe_readlink("/proc/self/fd/" + p)) for p in
os.listdir("/proc/self/fd")])
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]
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
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs