diff options
author | Marco Trevisan (TreviƱo) <mail@3v1n0.net> | 2020-09-02 19:35:43 +0200 |
---|---|---|
committer | Philip Chimento <philip.chimento@gmail.com> | 2020-09-20 14:59:13 -0700 |
commit | e2f9cf808fd3672f14326befabc3d523842c7d7e (patch) | |
tree | 58606f0758e779cee8d4fc9d6178d495693e5e2b | |
parent | 84cc8d8d7d8d63124ca95b9e87d7f232c6dd1937 (diff) | |
download | gjs-e2f9cf808fd3672f14326befabc3d523842c7d7e.tar.gz |
function: Use gatomicrefcount for trampoline refcounting
Since we depend on GLib 2.58 that includes this, let's just use it
-rw-r--r-- | gi/function.cpp | 9 | ||||
-rw-r--r-- | gi/function.h | 3 |
2 files changed, 5 insertions, 7 deletions
diff --git a/gi/function.cpp b/gi/function.cpp index f3408da4..b0cb101b 100644 --- a/gi/function.cpp +++ b/gi/function.cpp @@ -93,17 +93,14 @@ GJS_DEFINE_PRIV_FROM_JS(Function, gjs_function_class) GjsCallbackTrampoline* gjs_callback_trampoline_ref( GjsCallbackTrampoline* trampoline) { - trampoline->ref_count++; + g_atomic_ref_count_inc(&trampoline->ref_count); return trampoline; } void gjs_callback_trampoline_unref(GjsCallbackTrampoline *trampoline) { - /* Not MT-safe, like all the rest of GJS */ - - trampoline->ref_count--; - if (trampoline->ref_count == 0) { + if (g_atomic_ref_count_dec(&trampoline->ref_count)) { g_clear_pointer(&trampoline->js_function, g_closure_unref); if (trampoline->info && trampoline->closure) g_callable_info_free_closure(trampoline->info, trampoline->closure); @@ -550,7 +547,7 @@ GjsCallbackTrampoline* gjs_callback_trampoline_new( trampoline = g_new(GjsCallbackTrampoline, 1); new (trampoline) GjsCallbackTrampoline(); - trampoline->ref_count = 1; + g_atomic_ref_count_init(&trampoline->ref_count); trampoline->info = callable_info; g_base_info_ref((GIBaseInfo*)trampoline->info); diff --git a/gi/function.h b/gi/function.h index 2b2ea106..98d09d0f 100644 --- a/gi/function.h +++ b/gi/function.h @@ -29,6 +29,7 @@ #include <ffi.h> #include <girepository.h> #include <glib-object.h> +#include <glib.h> #include <js/RootingAPI.h> #include <js/TypeDecls.h> @@ -48,7 +49,7 @@ typedef enum { } GjsParamType; struct GjsCallbackTrampoline { - int ref_count; + gatomicrefcount ref_count; GICallableInfo *info; GClosure *js_function; |