Improve wnck_screen_force_update() doc, or make wnck_screen_force_update() more reentrant-friendly
Submitted by Vincent Untz
Link to original bug (#350671)
Description
I'm having fun with quitting/restarting the panel in loop :-)
Basically, we're entering twice in update_client_list(). That's not good. It might be caused by the fact that there are multiple applets within the same process (I didn't check the stack trace in depth).
(gdb) bt
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb77c8333 in __waitpid_nocancel () from /lib/tls/i686/cmov/libpthread.so.0
#2 0xb7ec23b5 in libgnomeui_segv_handle (signum=6) at gnome-ui-init.c:867
#3 <signal handler called>
#4 0xffffe410 in __kernel_vsyscall ()
#5 0xb6c5a861 in raise () from /lib/tls/i686/cmov/libc.so.6
#6 0xb6c5c009 in abort () from /lib/tls/i686/cmov/libc.so.6
#7 0xb6da3f97 in IA__g_logv (log_domain=0xb77b4181 "Wnck",
log_level=G_LOG_LEVEL_CRITICAL,
format=0xb6dd5481 "%s: assertion `%s' failed",
args1=0xbf81212c "�D{��D{�,�{��!\201��\220y�\201A{��D{��D{�\003\235��")
at gmessages.c:497
#8 0xb6da4044 in IA__g_log (log_domain=0xb77b4181 "Wnck",
log_level=G_LOG_LEVEL_CRITICAL,
format=0xb6dd5481 "%s: assertion `%s' failed") at gmessages.c:517
#9 0xb6da40a0 in IA__g_return_if_fail_warning (log_domain=0xb77b4181 "Wnck",
pretty_function=0xb77b44a2 "update_client_list",
expression=0xb77b44b5 "reentrancy_guard == 0") at gmessages.c:532
#10 0xb77990d0 in update_client_list (screen=0x80cf570) at screen.c:1177
#11 0xb779a7a2 in do_update_now (screen=0x80cf570) at screen.c:1912
#12 0xb7798550 in wnck_screen_force_update (screen=0x80cf570) at screen.c:753
#13 0x0804fe38 in workspace_switcher_applet_fill (applet=0x80cfc98)
at workspace-switcher.c:473
---Type <return> to continue, or q <return> to quit---
#14 0x0804c4f4 in wncklet_factory (applet=0x80cfc98,
iid=0x836c6d8 "OAFIID:GNOME_WorkspaceSwitcherApplet", data=0x0)
at wncklet.c:192
#15 0xb7f0811b in panel_applet_marshal_BOOLEAN__STRING (closure=0x80cd648,
return_value=0xbf8124f8, n_param_values=2, param_values=0x836c650,
invocation_hint=0x0, marshal_data=0x0) at panel-applet-marshal.c:128
#16 0xb6e1a9af in IA__g_closure_invoke (closure=0x80cd648,
return_value=0xbf8124f8, n_param_values=2, param_values=0x836c650,
invocation_hint=0x0) at gclosure.c:490
#17 0xb7c40a6e in bonobo_closure_invoke_va_list (closure=0x80cd648,
return_value=0xbf8124f8, var_args=0xbf812580 "") at bonobo-types.c:404
#18 0xb7c40d0d in bonobo_closure_invoke (closure=0x80cd648, return_type=20)
at bonobo-types.c:467
#19 0xb7f0561b in panel_applet_control_bound (control=0x8368090,
applet=0x80cfc98) at panel-applet.c:1364
#20 0xb6e31eb0 in IA__g_cclosure_marshal_VOID__VOID (closure=0x8326fa8,
return_value=0x0, n_param_values=1, param_values=0xbf812864,
invocation_hint=0xbf81275c, marshal_data=0x0) at gmarshal.c:77
#21 0xb6e1a9af in IA__g_closure_invoke (closure=0x8326fa8, return_value=0x0,
n_param_values=1, param_values=0xbf812864, invocation_hint=0xbf81275c)
at gclosure.c:490
#22 0xb6e3135f in signal_emit_unlocked_R (node=0x80ca750, detail=0,
instance=0x8368090, emission_return=0x0, instance_and_params=0xbf812864)
---Type <return> to continue, or q <return> to quit---
at gsignal.c:2438
#23 0xb6e3056a in IA__g_signal_emit_valist (instance=0x8368090, signal_id=172,
detail=0, var_args=0xbf812aec "�-\201�\020") at gsignal.c:2197
#24 0xb6e3085a in IA__g_signal_emit (instance=0x8368090, signal_id=172,
detail=0) at gsignal.c:2241
#25 0xb7df6a46 in impl_Bonobo_Control_setFrame (servant=0x83680a4,
frame=0x836c5e8, ev=0xbf812db8) at bonobo-control.c:432
#26 0xb7c4267d in _ORBIT_skel_small_Bonobo_Control_setFrame (
_o_servant=0x83680a4, _o_retval=0x0, _o_args=0xbf812bf0,
_o_ctx=0xbf812c5c, _o_ev=0xbf812db8,
_impl_setFrame=0xb7df6951 <impl_Bonobo_Control_setFrame>)
at Bonobo-common.c:584
#27 0xb781264e in ORBit_POAObject_invoke (pobj=0x83687c0, ret=0x0,
args=0xbf812bf0, ctx=0xbf812c5c, data=0xbf812d0c, ev=0xbf812db8)
at poa.c:1142
#28 0xb7818455 in ORBit_OAObject_invoke (adaptor_obj=0x83687c0, ret=0x0,
args=0xbf812bf0, ctx=0xbf812c5c, data=0xbf812d0c, ev=0xbf812db8)
at orbit-adaptor.c:336
#29 0xb77febfa in ORBit_small_invoke_adaptor (adaptor_obj=0x83687c0,
recv_buffer=0x836c578, m_data=0xb7c6a0c0, data=0xbf812d0c, ev=0xbf812db8)
at orbit-small.c:835
#30 0xb7812c08 in ORBit_POAObject_handle_request (pobj=0x83687c0,
opname=0x836d73c "setFrame", ret=0x0, args=0x0, ctx=0x0,
---Type <return> to continue, or q <return> to quit---
recv_buffer=0x836c578, ev=0xbf812db8) at poa.c:1351
#31 0xb7812e7d in ORBit_POAObject_invoke_incoming_request (pobj=0x83687c0,
recv_buffer=0x836c578, opt_ev=0xbf812db8) at poa.c:1421
#32 0xb7813498 in ORBit_POA_handle_request (poa=0x80ab198,
recv_buffer=0x836c578, objkey=0x836c590) at poa.c:1643
#33 0xb7818395 in ORBit_handle_request (orb=0x80ab0f8, recv_buffer=0x836c578)
at orbit-adaptor.c:296
#34 0xb77fab0c in giop_connection_handle_input (lcnx=0x8311160)
at giop-recv-buffer.c:1288
#35 0xb7820321 in link_connection_io_handler (gioc=0x0, condition=G_IO_IN,
data=0x8311160) at linc-connection.c:1380
#36 0xb7822a44 in link_source_dispatch (source=0x8311480,
callback=0xb78202bf <link_connection_io_handler>, user_data=0x8311160)
at linc-source.c:159
#37 0xb6d9a4e7 in g_main_dispatch (context=0x80aa400) at gmain.c:2043
#38 0xb6d9b9a1 in IA__g_main_context_dispatch (context=0x80aa400)
at gmain.c:2594
#39 0xb6d9bef5 in g_main_context_iterate (context=0x80aa400, block=1,
dispatch=1, self=0x805cb28) at gmain.c:2675
#40 0xb6d9c127 in IA__g_main_context_iteration (context=0x80aa400, may_block=1)
at gmain.c:2734
#41 0xb781e021 in link_main_iteration (block_for_reply=1) at linc.c:285
#42 0xb77f9b2c in giop_recv_buffer_get (ent=0xbf813120)
---Type <return> to continue, or q <return> to quit---
at giop-recv-buffer.c:718
#43 0xb77fe5c1 in ORBit_small_invoke_stub (obj=0x80cdf40, m_data=0xb6a11fe0,
ret=0x0, args=0xbf813210, ctx=0x0, ev=0xb6a1e56c) at orbit-small.c:657
#44 0xb77fe3fa in ORBit_small_invoke_stub_n (object=0x80cdf40,
methods=0xb6a12124, index=0, ret=0x0, args=0xbf813210, ctx=0x0,
ev=0xb6a1e56c) at orbit-small.c:575
#45 0xb7816a9b in ORBit_c_stub_invoke (obj=0x80cdf40, methods=0xb6a12124,
method_index=0, ret=0x0, args=0xbf813210, ctx=0x0, ev=0xb6a1e56c,
class_id=0, method_offset=4,
skel_impl=0xb69fa5b1 <_ORBIT_skel_small_Accessibility_EventListener_notifyEvent>) at poa.c:2643
#46 0xb69e05a0 in Accessibility_EventListener_notifyEvent (_obj=0x80cdf40,
e=0xbf813240, ev=0xb6a1e56c) at Accessibility-stubs.c:321
#47 0xb6a1b5cb in spi_atk_emit_eventv (gobject=0x80c6cc0, detail1=0,
detail2=0, any=0xbf8132e0, format=0xb6a1d1e1 "object:%s:%s")
at bridge.c:679
#48 0xb6a1c4e6 in spi_atk_bridge_signal_listener (signal_hint=0xbf81344c,
n_param_values=3, param_values=0xbf813554, data=0x80b62b8) at bridge.c:1083
#49 0xb6e31126 in signal_emit_unlocked_R (node=0x80b0550, detail=490,
instance=0x80c6cc0, emission_return=0x0, instance_and_params=0xbf813554)
at gsignal.c:2404
#50 0xb6e3056a in IA__g_signal_emit_valist (instance=0x80c6cc0, signal_id=102,
detail=490, var_args=0xbf813800 "") at gsignal.c:2197
---Type <return> to continue, or q <return> to quit---
#51 0xb6e309f8 in IA__g_signal_emit_by_name (instance=0x80c6cc0,
detailed_signal=0xb6a9499f "children_changed::remove") at gsignal.c:2265
#52 0xb6a66fb9 in gail_container_real_remove_gtk (container=0x808e110,
widget=0x80fb0f8, data=0x80c6cc0) at gailcontainer.c:248
#53 0xb6a66d85 in gail_container_remove_gtk (container=0x808e110,
widget=0x80fb0f8, data=0x80c6cc0) at gailcontainer.c:192
#54 0xb6e32a66 in IA__g_cclosure_marshal_VOID__OBJECT (closure=0x80ef2a0,
return_value=0x0, n_param_values=2, param_values=0xbf813b54,
invocation_hint=0xbf813a4c, marshal_data=0x0) at gmarshal.c:636
#55 0xb6e1a9af in IA__g_closure_invoke (closure=0x80ef2a0, return_value=0x0,
n_param_values=2, param_values=0xbf813b54, invocation_hint=0xbf813a4c)
at gclosure.c:490
#56 0xb6e3135f in signal_emit_unlocked_R (node=0x8061350, detail=0,
instance=0x808e110, emission_return=0x0, instance_and_params=0xbf813b54)
at gsignal.c:2438
#57 0xb6e3056a in IA__g_signal_emit_valist (instance=0x808e110, signal_id=78,
detail=0, var_args=0xbf813de0 "�Y\t\b\234}\005\b\001") at gsignal.c:2197
#58 0xb6e3085a in IA__g_signal_emit (instance=0x808e110, signal_id=78,
detail=0) at gsignal.c:2241
#59 0xb7436bb7 in IA__gtk_container_remove (container=0x808e110,
widget=0x80fb0f8) at gtkcontainer.c:991
#60 0xb764d8da in gtk_widget_dispose (object=0x80fb0f8) at gtkwidget.c:6865
#61 0xb6e1d102 in IA__g_object_run_dispose (object=0x80fb0f8) at gobject.c:571
---Type <return> to continue, or q <return> to quit---
#62 0xb751400e in IA__gtk_object_destroy (object=0x80fb0f8) at gtkobject.c:403
#63 0xb7644d11 in IA__gtk_widget_destroy (widget=0x80fb0f8) at gtkwidget.c:2158
#64 0xb77a02e2 in wnck_tasklist_free_tasks (tasklist=0x808e110)
at tasklist.c:1806
#65 0xb77a067c in wnck_tasklist_update_lists (tasklist=0x808e110)
at tasklist.c:1913
#66 0xb77a1332 in wnck_tasklist_window_added (screen=0x80cf570, win=0x8352710,
tasklist=0x808e110) at tasklist.c:2260
#67 0xb6e32a66 in IA__g_cclosure_marshal_VOID__OBJECT (closure=0x8102068,
return_value=0x0, n_param_values=2, param_values=0xbf814244,
invocation_hint=0xbf81413c, marshal_data=0x0) at gmarshal.c:636
#68 0xb6e1a9af in IA__g_closure_invoke (closure=0x8102068, return_value=0x0,
n_param_values=2, param_values=0xbf814244, invocation_hint=0xbf81413c)
at gclosure.c:490
#69 0xb6e3135f in signal_emit_unlocked_R (node=0x80d2dc0, detail=0,
instance=0x80cf570, emission_return=0x0, instance_and_params=0xbf814244)
at gsignal.c:2438
#70 0xb6e3056a in IA__g_signal_emit_valist (instance=0x80cf570, signal_id=186,
detail=0,
var_args=0xbf8144d0 ",�{�0\2356\bxE\201��\227y�p�\f\b\020'5\b\020'5\b\t")
at gsignal.c:2197
#71 0xb6e3085a in IA__g_signal_emit (instance=0x80cf570, signal_id=186,
detail=0) at gsignal.c:2241
---Type <return> to continue, or q <return> to quit---
#72 0xb779a9c6 in emit_window_opened (screen=0x80cf570, window=0x8352710)
at screen.c:1986
#73 0xb77997e1 in update_client_list (screen=0x80cf570) at screen.c:1376
#74 0xb779a7a2 in do_update_now (screen=0x80cf570) at screen.c:1912
#75 0xb779a819 in update_idle (data=0x80cf570) at screen.c:1934
#76 0xb6d9e11a in g_idle_dispatch (source=0x8364d08,
callback=0xb779a7f5 <update_idle>, user_data=0x80cf570) at gmain.c:3924
#77 0xb6d9a4e7 in g_main_dispatch (context=0x8093858) at gmain.c:2043
#78 0xb6d9b9a1 in IA__g_main_context_dispatch (context=0x8093858)
at gmain.c:2594
#79 0xb6d9bef5 in g_main_context_iterate (context=0x8093858, block=1,
dispatch=1, self=0x805cb28) at gmain.c:2675
#80 0xb6d9c6cc in IA__g_main_loop_run (loop=0x80cd7d8) at gmain.c:2879
#81 0xb7c2ab87 in bonobo_main () at bonobo-main.c:311
#82 0xb7c28ad9 in bonobo_generic_factory_main_timeout (
act_iid=0x80cd690 ":20.0,OAFIID:GNOME_Wncklet_Factory",
factory_cb=0xb7f06793 <panel_applet_factory_callback>,
user_data=0x80cd620, quit_timeout=2000) at bonobo-generic-factory.c:412
#83 0xb7c289ec in bonobo_generic_factory_main (
act_iid=0x80cd690 ":20.0,OAFIID:GNOME_Wncklet_Factory",
factory_cb=0xb7f06793 <panel_applet_factory_callback>, user_data=0x80cd620)
at bonobo-generic-factory.c:369
#84 0xb7f069b5 in panel_applet_factory_main_closure (
---Type <return> to continue, or q <return> to quit---
iid=0x80525ce "OAFIID:GNOME_Wncklet_Factory", applet_type=135058768,
closure=0x80cd648) at panel-applet.c:1757
#85 0xb7f06a83 in panel_applet_factory_main (
iid=0x80525ce "OAFIID:GNOME_Wncklet_Factory", applet_type=135058768,
callback=0x804c40f <wncklet_factory>, data=0x0) at panel-applet.c:1781
#86 0x0804c6cf in main (argc=3, argv=0xbf814994) at wncklet.c:212