On Wed, Sep 27, 2017 at 11:54:48PM +0200, Hilko Bengen wrote:
Hi,
when I tested building nbdkit 1.1.15 in a current Debian chroot, I ran
into the following test failure. A repeated build went fine through the
tests and so far I have not been able to reproduce it with the previous
version.
The failing build was done using a clean Debian/sid, amd64 chroot
spawned by sbuild.
nbdkit: debug: /<<PKGBUILDDIR>>/plugins/python/.libs/nbdkit-python-plugin.so:
unload
Exception AttributeError: "'module' object has no attribute
'close'" in 'garbage collection' ignored
Fatal Python error: unexpected exception during garbage collection
nbdkit terminated by signal 6
FAIL test-python (exit status: 1)
I've not seen this particular problem, but I did see another segfault
during plugin unload which you can (rarely) reproduce like this:
make && while make check TESTS=test-socket-activation >& /tmp/log ; do
echo -n . ; done
It can take many iterations to see the crash. When the tests exit,
examine both /tmp/log and tests/test-suite.log.
The stack trace from the crash is:
Thread 2 (Thread 0x7f67a975d800 (LWP 22742)):
#0 0x00007f67a9579250 in _dl_sort_fini () from /lib64/ld-linux-x86-64.so.2
#1 0x00007f67a9579402 in _dl_fini () from /lib64/ld-linux-x86-64.so.2
#2 0x00007f67a8817c68 in __run_exit_handlers () from /lib64/libc.so.6
#3 0x00007f67a8817cba in exit () from /lib64/libc.so.6
#4 0x00000000004046ac in main (argc=<optimized out>, argv=<optimized out>)
at main.c:506
Thread 1 (Thread 0x7f67a099b700 (LWP 22745)):
#0 0x00007f67a8870fc6 in strlen () from /lib64/libc.so.6
#1 0x00007f67a884f465 in fputs () from /lib64/libc.so.6
#2 0x0000000000406715 in prologue (type=0x409928 "debug") at errors.c:54
#3 0x000000000040685d in nbdkit_debug (fs=fs@entry=0x40ace6 "close")
at errors.c:91
#4 0x00000000004077d9 in plugin_close (conn=conn@entry=0x7f679c000910)
at plugins.c:386
#5 0x0000000000404de3 in free_connection (conn=0x7f679c000910)
at connections.c:228
#6 0x00000000004059fd in _handle_single_connection (sockout=<optimized out>,
sockin=<optimized out>) at connections.c:179
#7 handle_single_connection (sockin=<optimized out>, sockout=<optimized
out>)
at connections.c:189
#8 0x0000000000408023 in start_thread (datav=0x7fff1a4fbbe0) at sockets.c:262
#9 0x00007f67a8bb536d in start_thread () from /lib64/libpthread.so.0
#10 0x00007f67a88edbbf in clone () from /lib64/libc.so.6
It seems to indicate some kind of race condition between the plugin
being unloaded from memory while plugin_close is being called.
However I wasn't able to determine exactly what is happening. I'll
take another look in a minute.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages.
http://libguestfs.org