unity-panel-service crashed in g_type_class_meta_marshal

Bug #727788 reported by Michael Terry
34
This bug affects 4 people
Affects Status Importance Assigned to Milestone
Unity
Fix Released
Critical
Rodrigo Moya
unity (Ubuntu)
Fix Released
Undecided
Unassigned

Bug Description

Binary package hint: unity

Ever since the last update to unity, I've been getting lots of crashes in the panel, some right after each other in a loop.

Here's the backtrace, I think I have a fix too:

#0 g_type_class_meta_marshal (closure=0x687760, return_value=0x0, n_param_values=3, param_values=0x74f0f0,
    invocation_hint=0x7fffffffd5d0, marshal_data=<value optimized out>)
    at /build/buildd/glib2.0-2.28.1/./gobject/gclosure.c:876
#1 0x00007ffff692c7fc in g_closure_invoke (closure=0x687760, return_value=0x0, n_param_values=3,
    param_values=0x74f0f0, invocation_hint=0x7fffffffd5d0) at /build/buildd/glib2.0-2.28.1/./gobject/gclosure.c:767
#2 0x00007ffff693de1f in signal_emit_unlocked_R (node=<value optimized out>, detail=1425, instance=0x80f570,
    emission_return=0x0, instance_and_params=0x74f0f0) at /build/buildd/glib2.0-2.28.1/./gobject/gsignal.c:3290
#3 0x00007ffff6947258 in g_signal_emit_valist (instance=<value optimized out>, signal_id=<value optimized out>,
    detail=<value optimized out>, var_args=<value optimized out>)
    at /build/buildd/glib2.0-2.28.1/./gobject/gsignal.c:2983
#4 0x00007ffff694741f in g_signal_emit (instance=<value optimized out>, signal_id=<value optimized out>,
    detail=<value optimized out>) at /build/buildd/glib2.0-2.28.1/./gobject/gsignal.c:3040
#5 0x0000000000404b75 in panel_indicator_entry_accessible_finalize (object=0x80f570)
    at /build/buildd/unity-3.6.0/services/panel-indicator-entry-accessible.c:77
#6 0x00007ffff692dbc4 in g_object_unref (_object=0x80f570) at /build/buildd/glib2.0-2.28.1/./gobject/gobject.c:2734
#7 0x00000000004043d1 in on_indicator_entry_removed (io=<value optimized out>, entry=0x74ffa0,
    user_data=<value optimized out>) at /build/buildd/unity-3.6.0/services/panel-
#8 0x00007ffff692c7fc in g_closure_invoke (closure=0x8354d0, return_value=0x0, n_param_values=2,
    param_values=0x84c460, invocation_hint=0x7fffffffda90) at /build/buildd/glib2.0-2.28.1/./gobject/gclosure.c:767
#9 0x00007ffff693e019 in signal_emit_unlocked_R (node=<value optimized out>, detail=0, instance=0x7dd040,
    emission_return=0x0, instance_and_params=0x84c460) at /build/buildd/glib2.0-2.28.1/./gobject/gsignal.c:3252
#10 0x00007ffff6947258 in g_signal_emit_valist (instance=<value optimized out>, signal_id=<value optimized out>,
    detail=<value optimized out>, var_args=<value optimized out>)
#11 0x00007ffff694741f in g_signal_emit (instance=<value optimized out>, signal_id=<value optimized out>,
    detail=<value optimized out>) at /build/buildd/glib2.0-2.28.1/./gobject/gsignal.c:3040
#12 0x00007fffe0ad02a3 in switch_default_app (iapp=0x7d5000, newdef=0x645d20, active_window=0x6cbe70)
    at indicator-appmenu.c:1076
#13 0x00007fffe0ad19ad in register_window (connection=<value optimized out>, sender=0x7fffe40109c0 ":1.123",
    path=<value optimized out>, interface=<value optimized out>, method=<value optimized out>,
    params=<value optimized out>, invocation=0x6c5de0, user_data=0x7d5000) at indicator-appmenu.c:1272
#14 bus_method_call (connection=<value optimized out>, sender=0x7fffe40109c0 ":1.123", path=<value optimized out>,
    interface=<value optimized out>, method=<value optimized out>, params=<value optimized out>,
    invocation=0x6c5de0, user_data=0x7d5000) at indicator-appmenu.c:1355
#15 0x00007ffff6e35380 in call_in_idle_cb (user_data=<value optimized out>)
    at /build/buildd/glib2.0-2.28.1/./gio/gdbusconnection.c:4427
#16 0x00007ffff5ef6c2d in g_main_dispatch (context=0x649d90) at /build/buildd/gli

Basically, it's crashing when PanelIndicatorEntryAccessible is finalizing and calls atk_object_notify_state_change. I suspect that it shouldn't be doing that during the finalize call, but during dispose. Making that change (making the finalize function the dispose function) got rid of the crashes for me.

Related branches

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package unity - 3.6.0-0ubuntu2

---------------
unity (3.6.0-0ubuntu2) natty; urgency=low

  * services/panel-indicator-entry-accessible.c:
    - Use dispose function, not finalize function, to notify ATK that an
      entry is removed. Fixes continual panel crashes. LP: #727788
 -- Michael Terry <email address hidden> Wed, 02 Mar 2011 09:24:07 -0500

Changed in unity (Ubuntu):
status: New → Fix Released
Revision history for this message
Alejandro Piñeiro (apinheiro) wrote :

Ups, I missed that notification on my review of the branch, my bad

It should not required to change finalize for dispose, this line on the finalize

  atk_object_notify_state_change (ATK_OBJECT (piea), ATK_STATE_DEFUNCT, TRUE);

is wrong.

ATK_STATE_DEFUNCT is a state of the accessible object when the target object is not available. It doesn't makes sense to change the state of a object that is being destroyed.

That line should be removed, and the notification of the ATK_STATE_DEFUNCT be done when the base object (piea->priv->entry) is destroyed.

In the same way, ref_state_set should be updated to include this state if piea->priv->entry is not there.

I will ping Rodrigo Moya (the one working on the accessibility of the panel service) about this.

Changed in unity:
assignee: nobody → Rodrigo Moya (rodrigo-moya)
status: New → In Progress
Neil J. Patel (njpatel)
Changed in unity:
importance: Undecided → Critical
milestone: none → 3.6.4
Changed in unity:
milestone: 3.6.4 → 3.6.6
Changed in unity:
status: In Progress → Fix Committed
Changed in unity:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.