From 8cba1f4c17a3301dc2674ed750b9fce6f2c2dfb1 Mon Sep 17 00:00:00 2001 From: Nishal Kulkarni Date: Tue, 11 May 2021 15:08:20 +0530 Subject: [PATCH] grefcount: Optimise g_atomic_ref_count_dec Currently, `g_atomic_ref_count_dec ()` does two operations. We try to get this down to one operation. Replace `g_atomic_int_dec_and_test ()` with `g_atomic_int_add ()` Passing -1 as value. Note: changes current behaviour, checks are now done after decrement. --- glib/grefcount.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/glib/grefcount.c b/glib/grefcount.c index c0ee2985d..6826a0005 100644 --- a/glib/grefcount.c +++ b/glib/grefcount.c @@ -262,10 +262,13 @@ void gboolean (g_atomic_ref_count_dec) (gatomicrefcount *arc) { - g_return_val_if_fail (arc != NULL, FALSE); - g_return_val_if_fail (g_atomic_int_get (arc) > 0, FALSE); + gint old_value; - return g_atomic_int_dec_and_test (arc); + g_return_val_if_fail (arc != NULL, FALSE); + old_value = g_atomic_int_add (arc, -1); + g_return_val_if_fail (old_value > 0, FALSE); + + return old_value == 1; } /**