Hi,

The issue here is that the gobject is not unregistered from dbus.

Once you register it it will be unregistered when the last unref of the
dbus connection is done. However, while hide() unrefs the connection,
it is not guaranteed to be the last to do so, so the object is left registered.
Trying to register again causes a fatal error as there is already an object
registered at the path.

It is possible to cause an unregister, and I tried doing this from hide(),
but this causes a segfault on the next show. I suspect this is because
there is a FIXME in the dbus-glib code in the unregister callback, and the
callback does nothing. I suspect this leaves the bus in an inconsistent
state, leading to the crash. I haven't confirmed that this is the case, or
tried to work out whether it was my fault.

Another option is to not unregister the object on hide(), and then only
register it on show() if there was no previous show(). However, this
leaves the hide() ineffectual it seems, with the server still showing
up in the indicator.

Perhaps you have a fix in mind, but I wanted to share my insights from
trying to debug this.

Thanks,

James

-- 
Client crash on second indicate_server_show
https://bugs.launchpad.net/bugs/351537
You received this bug notification because you are a member of Indicator
Applet Developers, which is the registrant for Indicator Applet.

Status in Indicator Applet: Confirmed

Bug description:
After calling show(), hide(), and then show again, the client will crash.

_______________________________________________
Mailing list: https://launchpad.net/~dx-team
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~dx-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to