summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Trevisan (TreviƱo) <mail@3v1n0.net>2020-09-02 19:35:43 +0200
committerPhilip Chimento <philip.chimento@gmail.com>2020-09-20 14:59:13 -0700
commite2f9cf808fd3672f14326befabc3d523842c7d7e (patch)
tree58606f0758e779cee8d4fc9d6178d495693e5e2b
parent84cc8d8d7d8d63124ca95b9e87d7f232c6dd1937 (diff)
downloadgjs-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.cpp9
-rw-r--r--gi/function.h3
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;