** 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