mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-07 13:40:57 +00:00
sysprofd: remove use of GAtomicRCBox
Using an embedded ref count allows us to backport to older operating systems for which GLib is restricted to 2.56.
This commit is contained in:
@ -84,7 +84,7 @@ ipc_rapl_profiler_stop_locked (IpcRaplProfiler *self)
|
|||||||
if (self->turbostat != NULL)
|
if (self->turbostat != NULL)
|
||||||
sysprof_turbostat_stop (self->turbostat);
|
sysprof_turbostat_stop (self->turbostat);
|
||||||
|
|
||||||
g_clear_pointer (&self->turbostat, sysprof_turbostat_free);
|
g_clear_pointer (&self->turbostat, sysprof_turbostat_unref);
|
||||||
g_clear_pointer (&self->counter_ids, g_array_unref);
|
g_clear_pointer (&self->counter_ids, g_array_unref);
|
||||||
|
|
||||||
if (self->writer != NULL)
|
if (self->writer != NULL)
|
||||||
|
|||||||
@ -32,11 +32,12 @@
|
|||||||
|
|
||||||
struct _SysprofTurbostat
|
struct _SysprofTurbostat
|
||||||
{
|
{
|
||||||
GPid pid;
|
volatile gint ref_count;
|
||||||
GIOChannel *channel;
|
GPid pid;
|
||||||
guint channel_watch;
|
GIOChannel *channel;
|
||||||
GFunc sample_func;
|
guint channel_watch;
|
||||||
gpointer sample_data;
|
GFunc sample_func;
|
||||||
|
gpointer sample_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -51,7 +52,8 @@ sysprof_turbostat_new (GFunc sample_func,
|
|||||||
{
|
{
|
||||||
SysprofTurbostat *self;
|
SysprofTurbostat *self;
|
||||||
|
|
||||||
self = g_rc_box_new0 (SysprofTurbostat);
|
self = g_slice_new0 (SysprofTurbostat);
|
||||||
|
self->ref_count = 1;
|
||||||
self->pid = 0;
|
self->pid = 0;
|
||||||
self->channel = NULL;
|
self->channel = NULL;
|
||||||
self->sample_func = sample_func;
|
self->sample_func = sample_func;
|
||||||
@ -61,21 +63,36 @@ sysprof_turbostat_new (GFunc sample_func,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_turbostat_finalize (gpointer data)
|
sysprof_turbostat_finalize (SysprofTurbostat *self)
|
||||||
{
|
{
|
||||||
SysprofTurbostat *self = data;
|
|
||||||
|
|
||||||
if (self->pid != 0)
|
if (self->pid != 0)
|
||||||
sysprof_turbostat_stop (self);
|
sysprof_turbostat_stop (self);
|
||||||
|
|
||||||
g_assert (self->pid == 0);
|
g_assert (self->pid == 0);
|
||||||
g_assert (self->channel == NULL);
|
g_assert (self->channel == NULL);
|
||||||
|
|
||||||
|
g_slice_free (SysprofTurbostat, self);
|
||||||
|
}
|
||||||
|
|
||||||
|
SysprofTurbostat *
|
||||||
|
sysprof_turbostat_ref (SysprofTurbostat *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (self != NULL, NULL);
|
||||||
|
g_return_val_if_fail (self->ref_count > 0, NULL);
|
||||||
|
|
||||||
|
g_atomic_int_inc (&self->ref_count);
|
||||||
|
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sysprof_turbostat_free (SysprofTurbostat *self)
|
sysprof_turbostat_unref (SysprofTurbostat *self)
|
||||||
{
|
{
|
||||||
g_rc_box_release_full (self, sysprof_turbostat_finalize);
|
g_return_if_fail (self != NULL);
|
||||||
|
g_return_if_fail (self->ref_count > 1);
|
||||||
|
|
||||||
|
if (g_atomic_int_dec_and_test (&self->ref_count))
|
||||||
|
sysprof_turbostat_finalize (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|||||||
@ -43,8 +43,9 @@ gboolean sysprof_turbostat_start (SysprofTurbostat *self,
|
|||||||
void sysprof_turbostat_stop (SysprofTurbostat *self);
|
void sysprof_turbostat_stop (SysprofTurbostat *self);
|
||||||
gboolean sysprof_turbostat_sample (SysprofTurbostat *self,
|
gboolean sysprof_turbostat_sample (SysprofTurbostat *self,
|
||||||
GError **error);
|
GError **error);
|
||||||
void sysprof_turbostat_free (SysprofTurbostat *self);
|
SysprofTurbostat *sysprof_turbostat_ref (SysprofTurbostat *self);
|
||||||
|
void sysprof_turbostat_unref (SysprofTurbostat *self);
|
||||||
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofTurbostat, sysprof_turbostat_free)
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofTurbostat, sysprof_turbostat_unref)
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
Reference in New Issue
Block a user