From f42d7e6ac838de485206dcdfd8f65031863ecb25 Mon Sep 17 00:00:00 2001 From: David Schleef Date: Tue, 19 Nov 2002 02:29:18 +0000 Subject: [PATCH] Added gst_data_needs_copy_on_write() Original commit message from CVS: Added gst_data_needs_copy_on_write() --- gst/gstdata.c | 20 ++++++++++++++++++++ gst/gstdata.h | 1 + 2 files changed, 21 insertions(+) diff --git a/gst/gstdata.c b/gst/gstdata.c index 72d01e8a1b..afc99e2c69 100644 --- a/gst/gstdata.c +++ b/gst/gstdata.c @@ -92,6 +92,26 @@ gst_data_copy (const GstData *data) return NULL; } +/** + * gst_data_needs_copy_on_write: + * @data: a #GstData to copy + * + * Returns: TRUE if the given #GstData is potentially shared and needs to + * be copied before it can be modified safely. + */ +gboolean +gst_data_needs_copy_on_write (GstData *data) +{ + gint refcount; + + GST_ATOMIC_INT_READ (&data->refcount, &refcount); + + if (refcount == 1 && !GST_DATA_FLAG_IS_SET (data, GST_DATA_READONLY)) + return FALSE; + + return TRUE; +} + /** * gst_data_copy_on_write: * @data: a #GstData to copy diff --git a/gst/gstdata.h b/gst/gstdata.h index 20b85ba07d..0a17e23c51 100644 --- a/gst/gstdata.h +++ b/gst/gstdata.h @@ -87,6 +87,7 @@ void gst_data_copy_into (const GstData *data, GstData *target); /* basic operations on data */ GstData* gst_data_copy (const GstData *data); +gboolean gst_data_needs_copy_on_write (GstData *data); GstData* gst_data_copy_on_write (GstData *data); void gst_data_free (GstData *data);