I've done some investigating of this, and this is what I think is
happening:

- When seahorse-agent starts, various exit handlers are registered with
atexit(). These handlers are registered in the following order:
seahorse_agent_exit() [seahorse-plugins/agent/seahorse-agent.c],
shutdown_orb() [orbit2/src/orb/orb-core/corba-orb.c],
global_client_free() [seahorse-plugins/libseahorse/seahorse-gconf.c]

- When the X connection dies, exit() is called, which causes the exit
handlers to be called in reverse order.

- global_client_free() free's the global GConfClient in 
seahorse-plugins/libseahorse/seahorse-gconf.c
- shutdown_orb() closes the socket
- seahorse_agent_exit() removes some gconf notifies. However, because the 
global GConfClient was free'd earlier, a new one is created in 
get_global_client(). In addition to this, gconf_client_add_dir() is invoked 
again (which happened already when seahorse-agent originally started). 
Normally, this would trigger a call to CORBA_ORB_init(), which would undo what 
happened in shutdown_orb(). However, because gconf thinks it is already 
initialized (check out gconf_get_config_listener in gconf.c - the 
ConfigListener "listener" already exists), this doesn't get called again, 
leading to the assertion later on

-- 
seahorse-agent assert failure: ERROR:iop-profiles.c:606:IOP_generate_profiles: 
assertion failed: (obj && (obj->profile_list == NULL) && obj->orb)
https://bugs.launchpad.net/bugs/429322
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to