Alright, after some discussions with Ryan, I had a look into this again,
and I have now fixed the problem in compiz. Some notes about this:

 * DBUS_SESSION_BUS_ADDRESS in the program's env isn't mandatory, since dbus 
can scrape that information from the root window property if it has X11 support 
 * DBUS_SESSION_BUS_ADDRESS *won't* appear in the program env if it was 
launched from a VT or SSH or something
 * Compiz issues an UngrabServer request right after doing XQueryTree, and then 
initializes plugin screens right afterwards (before initializing every window).
 * UngrabServer isn't a synchronous operation, so there's a race for the X 
Server to process that in time
 * On CcpScreen's ctor, it will initialize libcompizconfig which loads backends 
(gconf)
 * GConf initializes and starts DBus to get a connection with the gconf server
 * GDbus sees that DBUS_SESSION_BUS_ADDRESS isn't set and calls dbus-launch 
--autolaunch to try and get the bus address
 * dbus-launch --autolaunch calls get_bus_address_platform_specific (X11 
backend) which calls XOpenDisplay () and XGetWindowProperty () to try and get 
the session bus address from the window prop
 * The UngrabServer request hasn't been processed yet, so XOpenDisplay 
instantly fails
 * GDbus is using g_spawn_sync incorrectly and doesn't restore normal child 
handling, so when the child process dbus-launch fails to return an address 
(very rare case), it just blocks forever until glib times out the request. This 
is what causes the apparent hang, then crash 2 minutes later

All of the items above the last one have been fixed compiz-side so this
is no longer an issue (though it does pose an interesting problem that
trying to get the session bus address while a server grab is active will
fail - that is probably a bad thing and should be resolved, maybe a temp
socket file should be created in the user's homedir?). Anyways, I
believe that while the last item is essentially a corner-case, it still
prints an interesting debug message if the command failed to get the bus
address and should be fixed.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/690239

Title:
  hang in g_spawn_sync and select()

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to