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