diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-07-17 22:24:35 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-10-02 18:58:04 +0200 |
commit | 27079a426c9d3db918b158976e44b9b143d78e1c (patch) | |
tree | c8a7b552da045214c4a36bad63ffd625b11bd44d | |
parent | eb34d40354e2474517c9b9bd787e0dadc89c2a81 (diff) | |
download | ffmpeg-streaming-27079a426c9d3db918b158976e44b9b143d78e1c.zip ffmpeg-streaming-27079a426c9d3db918b158976e44b9b143d78e1c.tar.gz |
buffer: convert to stdatomic
-rw-r--r-- | libavutil/buffer.c | 21 | ||||
-rw-r--r-- | libavutil/buffer_internal.h | 5 |
2 files changed, 14 insertions, 12 deletions
diff --git a/libavutil/buffer.c b/libavutil/buffer.c index 49a1f2d..0e2b4ef 100644 --- a/libavutil/buffer.c +++ b/libavutil/buffer.c @@ -16,10 +16,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include <stdatomic.h> #include <stdint.h> #include <string.h> -#include "atomic.h" #include "buffer_internal.h" #include "common.h" #include "mem.h" @@ -40,7 +40,8 @@ AVBufferRef *av_buffer_create(uint8_t *data, int size, buf->size = size; buf->free = free ? free : av_buffer_default_free; buf->opaque = opaque; - buf->refcount = 1; + + atomic_init(&buf->refcount, 1); if (flags & AV_BUFFER_FLAG_READONLY) buf->flags |= BUFFER_FLAG_READONLY; @@ -98,7 +99,7 @@ AVBufferRef *av_buffer_ref(AVBufferRef *buf) *ret = *buf; - avpriv_atomic_int_add_and_fetch(&buf->buffer->refcount, 1); + atomic_fetch_add_explicit(&buf->buffer->refcount, 1, memory_order_relaxed); return ret; } @@ -112,7 +113,7 @@ void av_buffer_unref(AVBufferRef **buf) b = (*buf)->buffer; av_freep(buf); - if (!avpriv_atomic_int_add_and_fetch(&b->refcount, -1)) { + if (atomic_fetch_add_explicit(&b->refcount, -1, memory_order_acq_rel) == 1) { b->free(b->opaque, b->data); av_freep(&b); } @@ -123,7 +124,7 @@ int av_buffer_is_writable(const AVBufferRef *buf) if (buf->buffer->flags & AV_BUFFER_FLAG_READONLY) return 0; - return avpriv_atomic_int_add_and_fetch(&buf->buffer->refcount, 0) == 1; + return atomic_load(&buf->buffer->refcount) == 1; } int av_buffer_make_writable(AVBufferRef **pbuf) @@ -209,7 +210,7 @@ AVBufferPool *av_buffer_pool_init2(int size, void *opaque, pool->alloc2 = alloc; pool->pool_free = pool_free; - avpriv_atomic_int_set(&pool->refcount, 1); + atomic_init(&pool->refcount, 1); return pool; } @@ -225,7 +226,7 @@ AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)) pool->size = size; pool->alloc = alloc ? alloc : av_buffer_alloc; - avpriv_atomic_int_set(&pool->refcount, 1); + atomic_init(&pool->refcount, 1); return pool; } @@ -260,7 +261,7 @@ void av_buffer_pool_uninit(AVBufferPool **ppool) pool = *ppool; *ppool = NULL; - if (!avpriv_atomic_int_add_and_fetch(&pool->refcount, -1)) + if (atomic_fetch_add_explicit(&pool->refcount, -1, memory_order_acq_rel) == 1) buffer_pool_free(pool); } @@ -274,7 +275,7 @@ static void pool_release_buffer(void *opaque, uint8_t *data) pool->pool = buf; ff_mutex_unlock(&pool->mutex); - if (!avpriv_atomic_int_add_and_fetch(&pool->refcount, -1)) + if (atomic_fetch_add_explicit(&pool->refcount, -1, memory_order_acq_rel) == 1) buffer_pool_free(pool); } @@ -327,7 +328,7 @@ AVBufferRef *av_buffer_pool_get(AVBufferPool *pool) ff_mutex_unlock(&pool->mutex); if (ret) - avpriv_atomic_int_add_and_fetch(&pool->refcount, 1); + atomic_fetch_add_explicit(&pool->refcount, 1, memory_order_relaxed); return ret; } diff --git a/libavutil/buffer_internal.h b/libavutil/buffer_internal.h index 64344d8..90d68aa 100644 --- a/libavutil/buffer_internal.h +++ b/libavutil/buffer_internal.h @@ -19,6 +19,7 @@ #ifndef AVUTIL_BUFFER_INTERNAL_H #define AVUTIL_BUFFER_INTERNAL_H +#include <stdatomic.h> #include <stdint.h> #include "buffer.h" @@ -40,7 +41,7 @@ struct AVBuffer { /** * number of existing AVBufferRef instances referring to this buffer */ - volatile int refcount; + atomic_uint refcount; /** * a callback for freeing the data @@ -85,7 +86,7 @@ struct AVBufferPool { * buffers have been released, then it's safe to free the pool and all * the buffers in it. */ - volatile int refcount; + atomic_uint refcount; int size; void *opaque; |