Commit 439ee482 authored by Emmanuele Bassi's avatar Emmanuele Bassi

Port GArray and friends to gatomicrefcount

Use the newly added API for reference counting instead of rolling our
own.
parent 09e2247d
......@@ -41,7 +41,7 @@
#include "gthread.h"
#include "gmessages.h"
#include "gqsort.h"
#include "grefcount.h"
/**
* SECTION:arrays
......@@ -106,7 +106,7 @@ struct _GRealArray
guint elt_size;
guint zero_terminated : 1;
guint clear : 1;
gint ref_count;
gatomicrefcount ref_count;
GDestroyNotify clear_func;
};
......@@ -199,9 +199,10 @@ g_array_sized_new (gboolean zero_terminated,
array->zero_terminated = (zero_terminated ? 1 : 0);
array->clear = (clear ? 1 : 0);
array->elt_size = elt_size;
array->ref_count = 1;
array->clear_func = NULL;
g_atomic_ref_count_init (&array->ref_count);
if (array->zero_terminated || reserved_size != 0)
{
g_array_maybe_expand (array, reserved_size);
......@@ -257,7 +258,7 @@ g_array_ref (GArray *array)
GRealArray *rarray = (GRealArray*) array;
g_return_val_if_fail (array, NULL);
g_atomic_int_inc (&rarray->ref_count);
g_atomic_ref_count_inc (&rarray->ref_count);
return array;
}
......@@ -287,7 +288,7 @@ g_array_unref (GArray *array)
GRealArray *rarray = (GRealArray*) array;
g_return_if_fail (array);
if (g_atomic_int_dec_and_test (&rarray->ref_count))
if (g_atomic_ref_count_dec (&rarray->ref_count))
array_free (rarray, FREE_SEGMENT);
}
......@@ -346,7 +347,7 @@ g_array_free (GArray *farray,
flags = (free_segment ? FREE_SEGMENT : 0);
/* if others are holding a reference, preserve the wrapper but do free/return the data */
if (!g_atomic_int_dec_and_test (&array->ref_count))
if (!g_atomic_ref_count_dec (&array->ref_count))
flags |= PRESERVE_WRAPPER;
return array_free (array, flags);
......@@ -882,7 +883,7 @@ struct _GRealPtrArray
gpointer *pdata;
guint len;
guint alloc;
gint ref_count;
gatomicrefcount ref_count;
GDestroyNotify element_free_func;
};
......@@ -936,9 +937,10 @@ g_ptr_array_sized_new (guint reserved_size)
array->pdata = NULL;
array->len = 0;
array->alloc = 0;
array->ref_count = 1;
array->element_free_func = NULL;
g_atomic_ref_count_init (&array->ref_count);
if (reserved_size != 0)
g_ptr_array_maybe_expand (array, reserved_size);
......@@ -1041,7 +1043,7 @@ g_ptr_array_ref (GPtrArray *array)
g_return_val_if_fail (array, NULL);
g_atomic_int_inc (&rarray->ref_count);
g_atomic_ref_count_inc (&rarray->ref_count);
return array;
}
......@@ -1066,7 +1068,7 @@ g_ptr_array_unref (GPtrArray *array)
g_return_if_fail (array);
if (g_atomic_int_dec_and_test (&rarray->ref_count))
if (g_atomic_ref_count_dec (&rarray->ref_count))
ptr_array_free (array, FREE_SEGMENT);
}
......@@ -1107,7 +1109,7 @@ g_ptr_array_free (GPtrArray *array,
/* if others are holding a reference, preserve the wrapper but
* do free/return the data
*/
if (!g_atomic_int_dec_and_test (&rarray->ref_count))
if (!g_atomic_ref_count_dec (&rarray->ref_count))
flags |= PRESERVE_WRAPPER;
return ptr_array_free (array, flags);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment