After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 139080 - Right-click Close during Heavy System Load: Crashes WNCK (2.6.0)
Right-click Close during Heavy System Load: Crashes WNCK (2.6.0)
Status: RESOLVED FIXED
Product: libwnck
Classification: Core
Component: tasklist
unspecified
Other Linux
: High critical
: ---
Assigned To: libwnck maintainers
libwnck maintainers
Depends on:
Blocks:
 
 
Reported: 2004-04-04 23:45 UTC by Matt T. Proud
Modified: 2007-07-31 03:02 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
remove weak pointers before destroying objects (620 bytes, patch)
2007-07-30 18:08 UTC, Ray Strode [halfline]
committed Details | Review

Description Matt T. Proud 2004-04-04 23:45:42 UTC
I found today that while right-clicking on the items in the window list and
using the context-menu functions, mainly the "Close" function, that WNCK had a
propensity to crash.

Backtrace from one of the crashes:

Backtrace was generated from '/usr/libexec/wnck-applet'

Using host libthread_db library "/lib/libthread_db.so.1".
[Thread debugging using libthread_db enabled]
[New Thread 16384 (LWP 8103)]
0x40b3f018 in waitpid () from /lib/libpthread.so.0

Thread 1 (Thread 16384 (LWP 8103))

  • #0 waitpid
    from /lib/libpthread.so.0
  • #1 __JCR_LIST__
    from /usr/lib/libgnomeui-2.so.0
  • #2 libgnomeui_segv_handle
    at gnome-ui-init.c line 741
  • #3 __pthread_sighandler
    at sighandler.c line 39
  • #4 <signal handler called>
  • #5 handlers_find
    at gsignal.c line 508
  • #6 signal_handlers_foreach_matched_R
    at gsignal.c line 1847
  • #7 g_signal_handlers_disconnect_matched
    at gsignal.c line 1932
  • #8 gtk_tooltips_destroy_data
    at gtktooltips.c line 140
  • #9 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 77
  • #10 g_closure_invoke
    at gclosure.c line 437
  • #11 signal_emit_unlocked_R
    at gsignal.c line 2436
  • #12 g_signal_emit_valist
    at gsignal.c line 2195
  • #13 g_signal_emit
    at gsignal.c line 2239
  • #14 gtk_object_dispose
    at gtkobject.c line 376
  • #15 gtk_widget_dispose
    at gtkwidget.c line 6357
  • #16 g_object_run_dispose
    at gobject.c line 602
  • #17 gtk_object_destroy
    at gtkobject.c line 361
  • #18 gtk_widget_destroy
    at gtkwidget.c line 1913
  • #19 wnck_task_finalize
    at tasklist.c line 322
  • #20 g_object_last_unref
    at gobject.c line 570
  • #21 wnck_tasklist_remove
    at tasklist.c line 1210
  • #22 g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 636
  • #23 g_type_class_meta_marshal
    at gclosure.c line 514
  • #24 g_closure_invoke
    at gclosure.c line 437
  • #25 signal_emit_unlocked_R
    at gsignal.c line 2366
  • #26 g_signal_emit_valist
    at gsignal.c line 2195
  • #27 g_signal_emit
    at gsignal.c line 2239
  • #28 gtk_container_remove
    at gtkcontainer.c line 994
  • #29 gtk_widget_dispose
    at gtkwidget.c line 6351
  • #30 g_object_run_dispose
    at gobject.c line 602
  • #31 gtk_object_destroy
    at gtkobject.c line 361
  • #32 gtk_widget_destroy
    at gtkwidget.c line 1913
  • #33 wnck_tasklist_free_tasks
    at tasklist.c line 1371
  • #34 wnck_tasklist_update_lists
    at tasklist.c line 1435
  • #35 wnck_tasklist_window_removed
    at tasklist.c line 1723
  • #36 g_cclosure_marshal_VOID__OBJECT
    at gmarshal.c line 636
  • #37 g_closure_invoke
    at gclosure.c line 437
  • #38 signal_emit_unlocked_R
    at gsignal.c line 2436
  • #39 g_signal_emit_valist
    at gsignal.c line 2195
  • #40 g_signal_emit
    at gsignal.c line 2239
  • #41 emit_window_closed
    at screen.c line 1554
  • #42 update_client_list
    at screen.c line 1045
  • #43 do_update_now
    at screen.c line 1472
  • #44 update_idle
    at screen.c line 1493
  • #45 g_idle_dispatch
    at gmain.c line 3750
  • #46 g_main_dispatch
    at gmain.c line 1895
  • #47 g_main_context_dispatch
    at gmain.c line 2441
  • #48 g_main_context_iterate
    at gmain.c line 2522
  • #49 g_main_loop_run
    at gmain.c line 2726
  • #50 bonobo_main
    at bonobo-main.c line 297
  • #51 bonobo_generic_factory_main_timeout
    at bonobo-generic-factory.c line 384
  • #52 bonobo_generic_factory_main
    at bonobo-generic-factory.c line 341
  • #53 panel_applet_factory_main_closure
    at panel-applet.c line 1556
  • #54 panel_applet_factory_main
    at panel-applet.c line 1580
  • #55 main
    at wncklet.c line 77
  • #0 waitpid
    from /lib/libpthread.so.0

Comment 1 Kjartan Maraas 2004-04-18 19:19:58 UTC
What version of libwnck, gnome-panel, gtk+ etc did you use to get this? Also
telling us the exact steps to reproduce this would  be helpful. 
Comment 2 Vincent Noel 2005-01-28 18:21:37 UTC
Moving to the right component. Sorry for the spam :p
Comment 3 André Klapper 2006-07-03 15:10:19 UTC
Closing this bug report as no further information has been provided. Please feel free to reopen this bug if you can provide the information asked for.
Thanks!
Comment 4 Ray Strode [halfline] 2007-07-30 18:03:18 UTC
We had a customer hit this bug here:

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=192963

(although most of the comments are private unfortunately)
Comment 5 Ray Strode [halfline] 2007-07-30 18:08:46 UTC
Created attachment 92729 [details] [review]
remove weak pointers before destroying objects

So it turned out the problem was that the button and action_menu of a task were living slightly longer than the task itself (because the task was getting finalized as part of the destruction of the button), so the button/action_menu pointers were getting nullified after the task block was freed.
Comment 6 Elijah Newren 2007-07-31 02:46:17 UTC
Nothing beats someone else tracking down the cause and fixing it.  :-)

Thanks, Ray, I'll assume you and others have tested the patch (as you said, most the comments are private in that other bug report), so go ahead and commit.
Comment 7 Ray Strode [halfline] 2007-07-31 03:02:15 UTC
2007-07-30  Ray Strode  <rstrode@redhat.com>

        * libwnck/tasklist.c (wnck_task_finalize): remove weak
        pointers on fields in task structure before freeing task
        block (bug 139080)