mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-10 23:20:54 +00:00
libsysprof-capture: remove use of GAtomicRCBox
If we backport to an older GLib release, we won't have the newer atomic helpers available. It's really not too much burden to do that manually if it means we can run on older systems.
This commit is contained in:
@ -61,11 +61,12 @@ G_STATIC_ASSERT (sizeof (MappedRingHeader) == 16);
|
|||||||
*/
|
*/
|
||||||
struct _MappedRingBuffer
|
struct _MappedRingBuffer
|
||||||
{
|
{
|
||||||
int mode;
|
volatile gint ref_count;
|
||||||
int fd;
|
int mode;
|
||||||
void *map;
|
int fd;
|
||||||
gsize body_size;
|
void *map;
|
||||||
gsize page_size;
|
gsize body_size;
|
||||||
|
gsize page_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline MappedRingHeader *
|
static inline MappedRingHeader *
|
||||||
@ -199,7 +200,8 @@ mapped_ring_buffer_new_reader (gsize buffer_size)
|
|||||||
header->offset = page_size;
|
header->offset = page_size;
|
||||||
header->size = buffer_size - page_size;
|
header->size = buffer_size - page_size;
|
||||||
|
|
||||||
self = g_atomic_rc_box_new0 (MappedRingBuffer);
|
self = g_slice_new0 (MappedRingBuffer);
|
||||||
|
self->ref_count = 1;
|
||||||
self->mode = MODE_READER;
|
self->mode = MODE_READER;
|
||||||
self->body_size = buffer_size - page_size;
|
self->body_size = buffer_size - page_size;
|
||||||
self->fd = fd;
|
self->fd = fd;
|
||||||
@ -296,7 +298,8 @@ mapped_ring_buffer_new_writer (gint fd)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
self = g_atomic_rc_box_new0 (MappedRingBuffer);
|
self = g_slice_new0 (MappedRingBuffer);
|
||||||
|
self->ref_count = 1;
|
||||||
self->mode = MODE_WRITER;
|
self->mode = MODE_WRITER;
|
||||||
self->fd = fd;
|
self->fd = fd;
|
||||||
self->body_size = buffer_size - page_size;
|
self->body_size = buffer_size - page_size;
|
||||||
@ -325,13 +328,22 @@ mapped_ring_buffer_finalize (MappedRingBuffer *self)
|
|||||||
void
|
void
|
||||||
mapped_ring_buffer_unref (MappedRingBuffer *self)
|
mapped_ring_buffer_unref (MappedRingBuffer *self)
|
||||||
{
|
{
|
||||||
g_atomic_rc_box_release_full (self, (GDestroyNotify)mapped_ring_buffer_finalize);
|
g_return_if_fail (self != NULL);
|
||||||
|
g_return_if_fail (self->ref_count > 0);
|
||||||
|
|
||||||
|
if (g_atomic_int_dec_and_test (&self->ref_count))
|
||||||
|
mapped_ring_buffer_finalize (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
MappedRingBuffer *
|
MappedRingBuffer *
|
||||||
mapped_ring_buffer_ref (MappedRingBuffer *self)
|
mapped_ring_buffer_ref (MappedRingBuffer *self)
|
||||||
{
|
{
|
||||||
return g_atomic_rc_box_acquire (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;
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
|
|||||||
Reference in New Issue
Block a user