[gjs] Remove context argument from gjs_keep_alive_add/remove_child



commit 1848de9fa7d3e86b5de3d417cba89c224ad31edd
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Wed Jan 15 10:18:47 2014 -0500

    Remove context argument from gjs_keep_alive_add/remove_child
    
    These can be called from finalizers, so this is wrong in general.

 gi/keep-alive.cpp |   33 ++++++++++-----------------------
 gi/keep-alive.h   |   10 ++++------
 gi/object.cpp     |    9 ++++-----
 3 files changed, 18 insertions(+), 34 deletions(-)
---
diff --git a/gi/keep-alive.cpp b/gi/keep-alive.cpp
index 8eee636..8470a23 100644
--- a/gi/keep-alive.cpp
+++ b/gi/keep-alive.cpp
@@ -263,9 +263,8 @@ gjs_keep_alive_new(JSContext *context)
 }
 
 void
-gjs_keep_alive_add_child(JSContext         *context,
-                         JSObject          *keep_alive,
-                         GjsUnrootedFunc  notify,
+gjs_keep_alive_add_child(JSObject          *keep_alive,
+                         GjsUnrootedFunc    notify,
                          JSObject          *obj,
                          void              *data)
 {
@@ -273,11 +272,7 @@ gjs_keep_alive_add_child(JSContext         *context,
     Child *child;
 
     g_assert(keep_alive != NULL);
-
-    JS_BeginRequest(context);
-    priv = priv_from_js(context, keep_alive);
-    JS_EndRequest(context);
-
+    priv = (KeepAlive *) JS_GetPrivate(keep_alive);
     g_assert(priv != NULL);
 
     g_return_if_fail(!priv->inside_trace);
@@ -298,19 +293,16 @@ gjs_keep_alive_add_child(JSContext         *context,
 }
 
 void
-gjs_keep_alive_remove_child(JSContext         *context,
-                            JSObject          *keep_alive,
-                            GjsUnrootedFunc  notify,
+gjs_keep_alive_remove_child(JSObject          *keep_alive,
+                            GjsUnrootedFunc    notify,
                             JSObject          *obj,
                             void              *data)
 {
     KeepAlive *priv;
     Child child;
 
-    JS_BeginRequest(context);
-    priv = priv_from_js(context, keep_alive);
-    JS_EndRequest(context);
-
+    g_assert(keep_alive != NULL);
+    priv = (KeepAlive *) JS_GetPrivate(keep_alive);
     g_assert(priv != NULL);
 
     g_return_if_fail(!priv->inside_trace);
@@ -320,8 +312,7 @@ gjs_keep_alive_remove_child(JSContext         *context,
     child.child = obj;
     child.data = data;
 
-    g_hash_table_remove(priv->children,
-                        &child);
+    g_hash_table_remove(priv->children, &child);
 }
 
 static JSObject*
@@ -366,9 +357,7 @@ gjs_keep_alive_add_global_child(JSContext         *context,
 
     keep_alive = gjs_keep_alive_get_global(context);
 
-    gjs_keep_alive_add_child(context,
-                             keep_alive,
-                             notify, child, data);
+    gjs_keep_alive_add_child(keep_alive, notify, child, data);
 
     JS_EndRequest(context);
 }
@@ -389,9 +378,7 @@ gjs_keep_alive_remove_global_child(JSContext         *context,
         g_error("no keep_alive property on the global object, have you "
                 "previously added this child?");
 
-    gjs_keep_alive_remove_child(context,
-                                gjs_keep_alive_get_global(context),
-                                notify, child, data);
+    gjs_keep_alive_remove_child(keep_alive, notify, child, data);
 
     JS_EndRequest(context);
 }
diff --git a/gi/keep-alive.h b/gi/keep-alive.h
index a5880c1..4460472 100644
--- a/gi/keep-alive.h
+++ b/gi/keep-alive.h
@@ -54,14 +54,12 @@ typedef void (* GjsUnrootedFunc) (JSObject *obj,
 
 
 JSObject* gjs_keep_alive_new                       (JSContext         *context);
-void      gjs_keep_alive_add_child                 (JSContext         *context,
-                                                    JSObject          *keep_alive,
-                                                    GjsUnrootedFunc  notify,
+void      gjs_keep_alive_add_child                 (JSObject          *keep_alive,
+                                                    GjsUnrootedFunc    notify,
                                                     JSObject          *child,
                                                     void              *data);
-void      gjs_keep_alive_remove_child              (JSContext         *context,
-                                                    JSObject          *keep_alive,
-                                                    GjsUnrootedFunc  notify,
+void      gjs_keep_alive_remove_child              (JSObject          *keep_alive,
+                                                    GjsUnrootedFunc    notify,
                                                     JSObject          *child,
                                                     void              *data);
 JSObject* gjs_keep_alive_get_global                (JSContext         *context);
diff --git a/gi/object.cpp b/gi/object.cpp
index 2d38e8a..af35c4d 100644
--- a/gi/object.cpp
+++ b/gi/object.cpp
@@ -858,7 +858,7 @@ handle_toggle_down(JSContext *context,
      */
     if (priv->keep_alive != NULL) {
         gjs_debug_lifecycle(GJS_DEBUG_GOBJECT, "Removing object from keep alive");
-        gjs_keep_alive_remove_child(context, priv->keep_alive,
+        gjs_keep_alive_remove_child(priv->keep_alive,
                                     gobj_no_longer_kept_alive_func,
                                     obj,
                                     priv);
@@ -906,7 +906,7 @@ handle_toggle_up(JSContext *context,
     if (priv->keep_alive == NULL) {
         gjs_debug_lifecycle(GJS_DEBUG_GOBJECT, "Adding object to keep alive");
         priv->keep_alive = gjs_keep_alive_get_global(context);
-        gjs_keep_alive_add_child(context, priv->keep_alive,
+        gjs_keep_alive_add_child(priv->keep_alive,
                                  gobj_no_longer_kept_alive_func,
                                  obj,
                                  priv);
@@ -1154,8 +1154,7 @@ associate_js_gobject (JSContext      *context,
      * wrappee).
      */
     priv->keep_alive = gjs_keep_alive_get_global(context);
-    gjs_keep_alive_add_child(context,
-                             priv->keep_alive,
+    gjs_keep_alive_add_child(priv->keep_alive,
                              gobj_no_longer_kept_alive_func,
                              object,
                              priv);
@@ -1374,7 +1373,7 @@ object_instance_finalize(JSFreeOp  *fop,
          */
         {
             JSContext *context = JS_NewContext(fop->runtime(), 8192);
-            gjs_keep_alive_remove_child(context, priv->keep_alive,
+            gjs_keep_alive_remove_child(priv->keep_alive,
                                         gobj_no_longer_kept_alive_func,
                                         obj,
                                         priv);


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