Comment 5 for bug 395216

Revision history for this message
In , Colin Walters (walters) wrote :

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.