Description of problem:
RPM hangs while modifying database if multiple readers open.
Version-Release number of selected component (if applicable):
Very. I've been able to reproduce this every time I've tried.
Steps to Reproduce:
1. Verify that there are *no* __db* files in /var/lib/rpm
2. Open three terminals
3. In the first, execute "rpm -vv -qa"
4. Once output begins in the first terminal, execute "rpm -vv -qa" in the second
5. Once output begins in teh second terminal, execute "rpm -e inews" (or some
other unnecessary package).
The two queries will complete. The removal of the package will hang. A trace
of the process at this point reveals it is stuck in a futex() call. It must be
killed forcefully. It will still have three __db files open according to lsof
(though no open file descriptors to them), and all three remain on disk. The
__db files, of course, must be removed before normal RPM interaction can resume.
Package should be removed.
This is on a Red Hat 9 system with about 900 packages installed, glibc
2.3.2-27.9 (and has been booted since installation), and all patches released
through April 10th, 2003. System has plenty of memory free and a 1GHz Athlon CPU.
while true; do rpm -qa; sleep 1; done
in 2 different windows, and then trying
rpm -e time
works for me with glibc-2.3.2-11.9 and kernel-smp-2.4.20-2.54