From 7f5ec153593635ccdc14ecd877409b76f8c3064b Mon Sep 17 00:00:00 2001 From: "Joshua N. Pritikin" Date: Tue, 25 Sep 2001 04:07:09 +0000 Subject: [PATCH] add refcnt assertions Original commit message from CVS: add refcnt assertions --- gst/gstbuffer.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c index 319d1bf7b7..4ddc9a6b45 100644 --- a/gst/gstbuffer.c +++ b/gst/gstbuffer.c @@ -160,6 +160,7 @@ gst_buffer_create_sub_loc (GST_WHERE_ARGS_ GstBuffer *buffer; g_return_val_if_fail (parent != NULL, NULL); + g_return_val_if_fail (GST_BUFFER_REFCOUNT(parent) > 0, NULL); g_return_val_if_fail (size > 0, NULL); g_return_val_if_fail ((offset+size) <= parent->size, NULL); @@ -238,6 +239,8 @@ gst_buffer_append_loc (GST_WHERE_ARGS_ g_return_val_if_fail (buffer != NULL, NULL); g_return_val_if_fail (append != NULL, NULL); g_return_val_if_fail (buffer->pool == NULL, NULL); + g_return_val_if_fail (GST_BUFFER_REFCOUNT(buffer) > 0, NULL); + g_return_val_if_fail (GST_BUFFER_REFCOUNT(append) > 0, NULL); GST_INFO (GST_CAT_BUFFER,"appending buffers %p and %p",buffer,append); @@ -304,7 +307,7 @@ gst_buffer_destroy (GstBuffer *buffer) #ifdef GST_DEBUG_ENABLED // make it hard to reuse by mistake - memset (buffer, ~0, sizeof (GstBuffer)); + memset (buffer, 0, sizeof (GstBuffer)); #endif // remove it entirely from memory @@ -342,7 +345,7 @@ void gst_buffer_print_live () GstBuffer *buf = elem->data; g_print ("%sbuffer %p created %s:%d data=%p size=0x%x\n", buf->parent? "sub":" ", - buf, (!buf->file || buf->file == ~0)? "?" : buf->file, + buf, (!buf->file || buf->file == NULL)? "?" : buf->file, buf->line, buf->data, buf->size); } @@ -364,14 +367,13 @@ void gst_buffer_ref (GstBuffer *buffer) { g_return_if_fail (buffer != NULL); + g_return_if_fail (GST_BUFFER_REFCOUNT(buffer) > 0); GST_INFO (GST_CAT_BUFFER, "ref buffer %p\n", buffer); #ifdef HAVE_ATOMIC_H - //g_return_if_fail(atomic_read(&(buffer->refcount)) > 0); atomic_inc (&(buffer->refcount)); #else - g_return_if_fail (buffer->refcount > 0); GST_BUFFER_LOCK (buffer); buffer->refcount++; GST_BUFFER_UNLOCK (buffer); @@ -391,14 +393,13 @@ gst_buffer_unref (GstBuffer *buffer) gint zero; g_return_if_fail (buffer != NULL); + g_return_if_fail (GST_BUFFER_REFCOUNT(buffer) > 0); GST_INFO (GST_CAT_BUFFER, "unref buffer %p\n", buffer); #ifdef HAVE_ATOMIC_H - g_return_if_fail (atomic_read (&(buffer->refcount)) > 0); zero = atomic_dec_and_test (&(buffer->refcount)); #else - g_return_if_fail (buffer->refcount > 0); GST_BUFFER_LOCK (buffer); buffer->refcount--; zero = (buffer->refcount == 0); @@ -424,6 +425,8 @@ gst_buffer_copy_loc (GST_WHERE_ARGS_ GstBuffer *buffer) { GstBuffer *newbuf; + g_return_val_if_fail (GST_BUFFER_REFCOUNT(buffer) > 0, NULL); + // if a copy function exists, use it, else copy the bytes if (buffer->copy != NULL) { newbuf = (buffer->copy)(buffer); @@ -463,6 +466,9 @@ gst_buffer_copy_loc (GST_WHERE_ARGS_ GstBuffer *buffer) gboolean gst_buffer_is_span_fast (GstBuffer *buf1, GstBuffer *buf2) { + g_return_val_if_fail (GST_BUFFER_REFCOUNT(buf1) > 0, FALSE); + g_return_val_if_fail (GST_BUFFER_REFCOUNT(buf2) > 0, FALSE); + return (buf1->parent && buf2->parent && (buf1->parent == buf2->parent) && ((buf1->data + buf1->size) == buf2->data)); @@ -494,6 +500,9 @@ gst_buffer_span_loc (GST_WHERE_ARGS_ { GstBuffer *newbuf; + g_return_val_if_fail (GST_BUFFER_REFCOUNT(buf1) > 0, NULL); + g_return_val_if_fail (GST_BUFFER_REFCOUNT(buf2) > 0, NULL); + // make sure buf1 has a lower address than buf2 if (buf1->data > buf2->data) { GstBuffer *tmp = buf1;