
On 08/29/2013 07:08 PM, Eric Blake wrote:
We are already providing an LD_PRELOAD override of dbus_message_set_reply_serial as part of that test, which SHOULD be avoiding that assert (at least, it did so on both RHEL 5 and current Fedora) (see commit 524f52c). Can you do some debugging under gdb to see why the preload is not being used on Ubuntu's version of dbus?
The mechanism itself is working fine, but looking at the backtrace it seems that dbus_message_set_reply_serial is called from within a function that's not part of the mock library: Breakpoint 1, 0x00007ffff5aaf8e0 in dbus_message_set_reply_serial () from /lib/x86_64-linux-gnu/libdbus-1.so.3 (gdb) bt #0 0x00007ffff5aaf8e0 in dbus_message_set_reply_serial () from /lib/x86_64-linux-gnu/libdbus-1.so.3 #1 0x00007ffff5ab2a28 in dbus_message_new_method_return () from /lib/x86_64-linux-gnu/libdbus-1.so.3 #2 0x00007ffff770c71f in virDBusCallMethod (conn=0x1, replyout=0x0, destination=<optimized out>, path=<optimized out>, iface=0x7ffff791c8f0 "org.freedesktop.machine1.Manager", member=<optimized out>, types=0x7ffff791c9cb "sayssusa(sv)") at ../../src/util/virdbus.c:1151 #3 0x00007ffff77459c1 in virSystemdCreateMachine (name=<optimized out>, drivername=0x411d3d "lxc", privileged=<optimized out>, uuid=0x7fffffffded0 "\001\001\001\001\002\002\002\002\003\003\003\003\004\004\004\004", rootdir=<optimized out>, pidleader=123, iscontainer=true, partition=0x411db2 "highpriority.slice") at ../../src/util/virsystemd.c:213 #4 0x00000000004031e9 in testCreateContainer (opaque=<optimized out>) at ../../tests/virsystemdtest.c:39 #5 0x0000000000403f9d in virtTestRun (title=<optimized out>, nloops=1, body=0x403150 <testCreateContainer>, data=0x0) at ../../tests/testutils.c:169 #6 0x0000000000402bc1 in mymain () at ../../tests/virsystemdtest.c:178 #7 0x000000000040468b in virtTestMain (argc=1, argv=<optimized out>, func=0x402b90 <mymain>) at ../../tests/testutils.c:772 #8 0x00000000004029e0 in main (argc=1, argv=0x7fffffffe168) at ../../tests/virsystemdtest.c:207 as can be seen here: ldd -r .libs/virsystemdmock.so undefined symbol: dbus_set_error (.libs/virsystemdmock.so) linux-vdso.so.1 => (0x00007fff69bb2000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd46ecf0000) /lib64/ld-linux-x86-64.so.2 (0x00007fd46f2d2000) undefined symbol: dbus_message_new_error (.libs/virsystemdmock.so) undefined symbol: dbus_message_new_method_return (.libs/virsystemdmock.so) although the callstack seems to have fallen prey to the optimizer, virDBusCallMethod calls the mock dbus_connection_send_with_reply_and_block which in turn calls the real dbus_message_new_method_return which again calls dbus_message_set_reply_serial, but the real one instead of the mock version. On RHEL it's calling the mock ...reply_serial. On other occcasions I have observed that libtool on Ubuntu behaves differently than on RHEL or Fedora and maybe that's why the LD_PRELOAD works differently for intra-library calls there. But here I am entering the realm of wild speculations... -- Mit freundlichen Grüßen/Kind Regards Viktor Mihajlovski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martina Köderitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294