From: Nicolas Dufresne Date: Sat, 29 Jun 2019 13:22:05 +0000 (-0400) Subject: bufferpool: Fix the buffer size reset code X-Git-Tag: 1.16.2~37 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fgstreamer.git;a=commitdiff_plain;h=53bf06c08814ff9ac3968d47daf11a395cf26a01 bufferpool: Fix the buffer size reset code The offset in gst_buffer_resize() is additive. So to move back the offset to zero, we need to pass the opposite of the current offset. This was raised through the related unit test failingon 32bit as on 64bit the alignment padding was enough to hide the issue. The test was modified to also fail on 64bit. This patch will remove spurious assertions like: assertion 'bufmax >= bufoffs + offset + size' failed Fixes #316 --- diff --git a/gst/gstbufferpool.c b/gst/gstbufferpool.c index e5c7a58..619860e 100644 --- a/gst/gstbufferpool.c +++ b/gst/gstbufferpool.c @@ -1222,8 +1222,11 @@ default_reset_buffer (GstBufferPool * pool, GstBuffer * buffer) GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET_NONE; /* if the memory is intact reset the size to the full size */ - if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY)) - gst_buffer_resize (buffer, 0, pool->priv->size); + if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY)) { + gsize offset; + gst_buffer_get_sizes (buffer, &offset, NULL); + gst_buffer_resize (buffer, -offset, pool->priv->size); + } /* remove all metadata without the POOLED flag */ gst_buffer_foreach_meta (buffer, remove_meta_unpooled, pool); diff --git a/tests/check/gst/gstbufferpool.c b/tests/check/gst/gstbufferpool.c index f0c3c8d..dd9b2dc 100644 --- a/tests/check/gst/gstbufferpool.c +++ b/tests/check/gst/gstbufferpool.c @@ -190,7 +190,7 @@ GST_START_TEST (test_buffer_modify_discard) gst_buffer_pool_acquire_buffer (pool, &buf, NULL); buffer_track_destroy (buf, &dcount); /* do resize, as we didn't modify the memory, pool should reuse this buffer */ - gst_buffer_resize (buf, 5, 2); + gst_buffer_resize (buf, 8, 2); gst_buffer_unref (buf); /* buffer should've gone back into pool */