Hello,
while playing with HAL support I get a segfault while mounting or
unmounting a USB device:
modified property volume.mount_point in /org/freedesktop/Hal/devices/volume_uuid_A047_F357
process 8894: You can't recurse into an empty array or off the end of a message body
terminate called after throwing an instance of 'DBus::ErrorInvalidArgs'
what(): type mismatch
Program received signal SIGABRT, Aborted.
0xb7f3f410 in __kernel_vsyscall ()
(gdb) bt
#0 0xb7f3f410 in __kernel_vsyscall ()
#1 0xb7c86085 in raise () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7c87a01 in abort () from /lib/tls/i686/cmov/libc.so.6
#3 0xb7e95480 in __gnu_cxx::__verbose_terminate_handler ()
from /usr/lib/libstdc++.so.6
#4 0xb7e92d05 in ?? () from /usr/lib/libstdc++.so.6
#5 0xb7e92d42 in std::terminate () from /usr/lib/libstdc++.so.6
#6 0xb7e92e6a in __cxa_throw () from /usr/lib/libstdc++.so.6
#7 0xb7f25fa3 in DBus::MessageIter::get_basic (this=0xbfb6f20c, type_id=115,
ptr=0xbfb6f1c4) at message.cpp:79
#8 0xb7f2604a in DBus::MessageIter::get_string (this=0xbfb6f20c)
at message.cpp:201
#9 0x080523b1 in operator>> (iter=@0xbfb6f20c, val=@0xbfb6f284)
at ../../include/dbus-c++/types.h:400
#10 0x08052497 in operator>><std::string, bool, bool, DBus::Invalid, DBus::Invalid, DBus::Invalid, DBus::Invalid, DBus::Invalid> (iter=@0xbfb6f298,
val=@0xbfb6f284) at ../../include/dbus-c++/types.h:492
#11 0x0804e403 in HalDeviceProxy::PropertyModifiedCb (this=0x805cb98,
sig=@0xbfb6f440) at hal-listen.cpp:92
#12 0x08050bfb in DBus::Callback<HalDeviceProxy, void, DBus::SignalMessage const&>::call (this=0x805cd90, param=@0xbfb6f440)
at ../../include/dbus-c++/util.h:263
#13 0xb7f0f24b in DBus::Slot<void, DBus::SignalMessage const&>::call (
---Type <return> to continue, or q <return> to quit---
this=0x805cce4, param=@0xbfb6f440) at ../include/dbus-c++/util.h:237
#14 0xb7f0e478 in DBus::InterfaceProxy::dispatch_signal (this=0x805cb98,
msg=@0xbfb6f440) at interface.cpp:138
#15 0xb7f13e89 in DBus::ObjectProxy::handle_message (this=0x805cbb8,
msg=@0xbfb6f440) at object.cpp:365
#16 0xb7f17a31 in DBus::Callback<DBus::ObjectProxy, bool, DBus::Message const&>::call (this=0x805cc20, param=@0xbfb6f440) at ../include/dbus-c++/util.h:263
#17 0xb7f20291 in DBus::Slot<bool, DBus::Message const&>::call (
this=0x805cbd4, param=@0xbfb6f440) at ../include/dbus-c++/util.h:237
#18 0xb7f1ed1e in DBus::Connection::Private::message_filter_stub (
conn=0x8058b78, dmsg=0x8058db0, data=0x805cbd4) at connection.cpp:163
#19 0xb7c329f7 in dbus_connection_dispatch () from /usr/lib/libdbus-1.so.3
#20 0xb7f1ede4 in DBus::Connection::Private::do_dispatch (this=0x80583e8)
at connection.cpp:131
#21 0xb7f224ad in DBus::Dispatcher::dispatch_pending (this=0x8057460)
at dispatcher.cpp:174
#22 0xb7f2a70f in DBus::BusDispatcher::do_iteration (this=0x8057460)
at eventloop-integration.cpp:92
#23 0xb7f2a3e7 in DBus::BusDispatcher::enter (this=0x8057460)
at eventloop-integration.cpp:79
#24 0x0804f41a in main () at hal-listen.cpp:126
See here the root of the Exception:
void MessageIter::get_basic(int type_id, void *ptr)
{
if (type() != type_id)
throw ErrorInvalidArgs("type mismatch");
dbus_message_iter_get_basic((DBusMessageIter *)_iter, ptr);
}
I just debugged that type() return a '0' and type_id is '115'.
We've no bug system at the moment. I'll setup one on sourceforge in the future.
regards
Andreas
|