mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof: remove use of GAtomicRCBox
Switching this to use an embedded ref count allows us to backport to operating systems restricted to GLib 2.56.
This commit is contained in:
@ -45,6 +45,7 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
volatile gint ref_count;
|
||||||
SysprofSelection *selection;
|
SysprofSelection *selection;
|
||||||
SysprofCaptureReader *reader;
|
SysprofCaptureReader *reader;
|
||||||
GPtrArray *resolvers;
|
GPtrArray *resolvers;
|
||||||
@ -82,7 +83,7 @@ enum {
|
|||||||
static GParamSpec *properties[N_PROPS];
|
static GParamSpec *properties[N_PROPS];
|
||||||
|
|
||||||
static void
|
static void
|
||||||
generate_free (Generate *g)
|
generate_finalize (Generate *g)
|
||||||
{
|
{
|
||||||
g_clear_pointer (&g->reader, sysprof_capture_reader_unref);
|
g_clear_pointer (&g->reader, sysprof_capture_reader_unref);
|
||||||
g_clear_pointer (&g->rax, raxFree);
|
g_clear_pointer (&g->rax, raxFree);
|
||||||
@ -94,18 +95,28 @@ generate_free (Generate *g)
|
|||||||
g_clear_pointer (&g->resolved, g_array_unref);
|
g_clear_pointer (&g->resolved, g_array_unref);
|
||||||
g_clear_pointer (&g->cmdlines, g_hash_table_unref);
|
g_clear_pointer (&g->cmdlines, g_hash_table_unref);
|
||||||
g_clear_object (&g->selection);
|
g_clear_object (&g->selection);
|
||||||
|
g_slice_free (Generate, g);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Generate *
|
static Generate *
|
||||||
generate_ref (Generate *g)
|
generate_ref (Generate *g)
|
||||||
{
|
{
|
||||||
return g_atomic_rc_box_acquire (g);
|
g_return_val_if_fail (g != NULL, NULL);
|
||||||
|
g_return_val_if_fail (g->ref_count > 0, NULL);
|
||||||
|
|
||||||
|
g_atomic_int_inc (&g->ref_count);
|
||||||
|
|
||||||
|
return g;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
generate_unref (Generate *g)
|
generate_unref (Generate *g)
|
||||||
{
|
{
|
||||||
g_atomic_rc_box_release_full (g, (GDestroyNotify)generate_free);
|
g_return_if_fail (g != NULL);
|
||||||
|
g_return_if_fail (g->ref_count > 0);
|
||||||
|
|
||||||
|
if (g_atomic_int_dec_and_test (&g->ref_count))
|
||||||
|
generate_finalize (g);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -806,7 +817,8 @@ sysprof_memprof_profile_generate (SysprofProfile *profile,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
g = g_atomic_rc_box_new0 (Generate);
|
g = g_slice_new0 (Generate);
|
||||||
|
g->ref_count = 1;
|
||||||
g->reader = sysprof_capture_reader_copy (self->reader);
|
g->reader = sysprof_capture_reader_copy (self->reader);
|
||||||
g->selection = sysprof_selection_copy (self->selection);
|
g->selection = sysprof_selection_copy (self->selection);
|
||||||
g->cmdlines = g_hash_table_new (NULL, NULL);
|
g->cmdlines = g_hash_table_new (NULL, NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user