Summary: | SIGSEGV in dbus_address_entry_get_value() | ||
---|---|---|---|
Product: | dbus | Reporter: | Scott James Remnant <scott> |
Component: | core | Assignee: | Havoc Pennington <hp> |
Status: | RESOLVED NOTOURBUG | QA Contact: | John (J5) Palmieri <johnp> |
Severity: | normal | ||
Priority: | medium | CC: | walters |
Version: | 1.2.x | ||
Hardware: | Other | ||
OS: | All | ||
URL: | https://bugs.launchpad.net/ubuntu/+source/dbus/+bug/395216 | ||
Whiteboard: | |||
i915 platform: | i915 features: |
Description
Scott James Remnant
2009-07-15 03:42:49 UTC
Ok, multiple levels of fun in this bug. The first thing to notice is that we're running in a non-main thread (created for processing ORBit requests it looks like?). Inside there we drop into some Evolution code, and then we happen to be the first caller of IA__g_vfs_get_default. Now...here's an interesting thing to note: static void g_daemon_vfs_init (GDaemonVfs *vfs) { ... vfs->async_bus = dbus_bus_get_private (DBUS_BUS_SESSION, NULL); ... if (g_thread_supported ()) dbus_threads_init_default (); Seems wrong, because that means if dbus_threads_init_default hasn't been called before now, the call to dbus_bus_get_private won't be locked. So this is a possible race condition between a worker thread and a main thread, but may or may not be the cause of the crash. I suspect it's not, but we should fix gvfs anyways. Now hmmm...assuming gdb hasn't lost its marbles due to gcc optimization, keys = (DBusList *) 0x19 just looks wrong. However in a quick review of this code I'm not seeing anything obviously wrong, though dbus_parse_address isn't the simplest function in the world. Anyways I'll submit a patch for gvfs. I'm going to assume this was fallout from "libdbus isn't actually thread-safe". |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.