Deadlock?



I am starting Nautilus and it hangs.

I find that it is waiting for a reply for the CORBA call
ConfigServer_add_client. I assume the ConfigServer in question is an object
whose server is the gconfd process.

So I fire up gdb and attach to gconfd to see what the daemon is doing. It is
waiting for an outgoing connection to do a ConfigListener_update_listener
outgoing CORBA call. I'm guessing that the listener is an object whose
server is the nautilus process.

This seems like a classic case of deadlock to me. But I'm assuming that
GConf is designed to avoid such problems and some other bug is leading to
this problem.

Can you help me Havoc?

======== nautilus ========
#0  0x409647ee in __select () from /lib/libc.so.6
#1  0x4014345c in __DTOR_END__ () from /gnome/lib/libIIOP.so.0
#2  0x4013c3de in giop_main_next_message_2 (blocking=1, monitor=0x8118cb8)
    at connection.c:1174
#3  0x4013d934 in giop_recv_reply_buffer_use_multiple_2 (
    request_cnx=0x8118cb8, request_ids=0xbffff088, block_for_reply=1)
    at giop-msg-buffer.c:1011
#4  0x4013da41 in giop_recv_reply_buffer_use_2 (request_cnx=0x8118cb8,
    request_id=3221221552, block_for_reply=-1073746064)
    at giop-msg-buffer.c:1060
#5  0x407a5743 in ConfigServer_add_client (_obj=0x811bf20, client=0x80e7fa8,
    ev=0xbffff0e0) at GConf-stubs.c:12910
#6  0x4078ecee in try_to_contact_server (start_if_not_found=-1073745696,
    err=0x0) at gconf.c:1772
#7  0x4078edbe in gconf_get_config_server (start_if_not_found=1, err=0x0)
    at gconf.c:1820
#8  0x4078d39c in gconf_engine_connect (conf=0x811aa50,
start_if_not_found=1,
    err=0x0) at gconf.c:261
#9  0x4078d658 in gconf_engine_get_default () at gconf.c:403
#10 0x40777c82 in gconf_client_get_default () at gconf-client.c:412
#11 0x406cea6a in nautilus_gconf_client_get_global ()
    at nautilus-gconf-extensions.c:66
#12 0x406cf7a1 in nautilus_gconf_notification_add (
    key=0x4072a985 "/apps/nautilus/user_level",
    notification_callback=0x406f91bc
<preferences_user_level_changed_notice>,
    callback_data=0x0) at nautilus-gconf-extensions.c:482
#13 0x406fae33 in nautilus_preferences_initialize (
    path=0x40720c21 "/apps/nautilus") at nautilus-preferences.c:1765
#14 0x406d020d in nautilus_global_preferences_initialize ()
    at nautilus-global-preferences.c:923
#15 0x8071e41 in main (argc=1, argv=0xbffff444) at nautilus-main.c:246
#16 0x408adbfc in __libc_start_main (main=0x8071a70 <main>, argc=1,
    ubp_av=0xbffff444, init=0x806079c <_init>, fini=0x80b665c <_fini>,
    rtld_fini=0x4000d674 <_dl_fini>, stack_end=0xbffff43c)
    at ../sysdeps/generic/libc-start.c:118
======== nautilus ========

======== gconfd ========
#0  0x40206282 in __libc_connect () from /lib/libc.so.6
#1  0x40085010 in iiop_connection_unix_new (
    sockpath=0x80599a0 "/tmp/orbit-darin/orb-1942687816479734533")
    at connection.c:972
#2  0x40084f5a in iiop_connection_unix_get (
    sockpath=0x80599a0 "/tmp/orbit-darin/orb-1942687816479734533",
    existing_only=0) at connection.c:937
#3  0x40063f06 in ORBit_parse_unixsock (obj=0x8059a38,
    sockpath=0x80599a0 "/tmp/orbit-darin/orb-1942687816479734533",
    existing_only=0) at orbit.c:511
#4  0x40069937 in ORBit_activate_profile (item=0x8059970, data=0x8059a38)
    at orbit_object.c:576
#5  0x400a97b9 in g_slist_foreach (list=0x8054848,
    func=0x400698ec <ORBit_activate_profile>, user_data=0x8059a38)
    at gslist.c:487
#6  0x40069a37 in _ORBit_object_get_connection (obj=0x8059a38)
    at orbit_object.c:599
#7  0x4011b436 in ConfigListener_update_listener (_obj=0x8059a38,
    database=0x8055fe8, db_address=0x8058a6f "def", old_cnxn=3238002689,
    where=0x8058a75 "/apps/nautilus", new_cnxn=1577058307, ev=0xbffff100)
    at GConf-stubs.c:1373
#8  0x804e4b0 in restore_listener (db=0x80570e8, lle=0x8058c68)
    at gconfd.c:1674
#9  0x804e5aa in listener_logentry_restore_and_destroy_foreach
(key=0x8058c68, 
    value=0x8058c68, data=0x0) at gconfd.c:1742
#10 0x4009d6ba in g_hash_table_foreach (hash_table=0x8057fe0,
    func=0x804e530 <listener_logentry_restore_and_destroy_foreach>,
    user_data=0x0) at ghash.c:300
#11 0x804e7de in logfile_read () at gconfd.c:1875
#12 0x804d29d in main (argc=3, argv=0xbffff374) at gconfd.c:589
#13 0x40148bfc in __libc_start_main (main=0x804cf64 <main>, argc=3,
    ubp_av=0xbffff374, init=0x804aad0 <_init>, fini=0x804ee7c <_fini>,
    rtld_fini=0x4000d674 <_dl_fini>, stack_end=0xbffff36c)
    at ../sysdeps/generic/libc-start.c:118
======== gconfd ========

    -- Darin

PS: The problem I was reporting last week does seem to be two gconfd
processes running at once. I suspect a problem with oafd, but I can't
reproduce the problem easier nor can I spot the flaw in oafd code.





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]