[gjs] object: Fix toggle check in dissociate_js_gobject()



commit 7735dd20841ddbec33f30bca06d733620a037956
Author: Philip Chimento <philip endlessm com>
Date:   Thu Mar 9 18:22:13 2017 -0800

    object: Fix toggle check in dissociate_js_gobject()
    
    If both a toggle up and toggle down were queued, we don't want to assert
    here, since the object would be scheduled to get freed anyway.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=778862

 gi/object.cpp |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
---
diff --git a/gi/object.cpp b/gi/object.cpp
index f450d5d..0db0849 100644
--- a/gi/object.cpp
+++ b/gi/object.cpp
@@ -1388,6 +1388,7 @@ static void
 disassociate_js_gobject(GObject *gobj)
 {
     ObjectInstance *priv = get_object_qdata(gobj);
+    bool had_toggle_down, had_toggle_up;
 
     g_object_weak_unref(priv->gobj, wrapped_gobj_dispose_notify, priv);
 
@@ -1398,13 +1399,15 @@ disassociate_js_gobject(GObject *gobj)
      * assertion.
      * https://bugzilla.gnome.org/show_bug.cgi?id=778862
      */
-    if (cancel_toggle_idle(gobj, TOGGLE_UP) ||
-        cancel_toggle_idle(gobj, TOGGLE_DOWN))
+    had_toggle_down = cancel_toggle_idle(gobj, TOGGLE_DOWN);
+    had_toggle_up = cancel_toggle_idle(gobj, TOGGLE_UP);
+    if (had_toggle_down != had_toggle_up) {
         g_critical("JS object wrapper for GObject %p (%s) is being released "
                    "while toggle references are still pending. This may happen "
                    "on exit in Gio.Application.vfunc_dbus_unregister(). If you "
                    "encounter it another situation, please report a GJS bug.",
                    gobj, G_OBJECT_TYPE_NAME(gobj));
+    }
 
     invalidate_all_signals(priv);
     release_native_object(priv);


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