diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-07-17 16:10:49 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-07-22 02:07:02 +0200 |
commit | 7c71f8e0ec987863157ad5e53820dd989c37ac01 (patch) | |
tree | 6e814dc7d1b6966c45d5d4019a27d2861ed46575 | |
parent | 9e1508f1e7a21aab9c25614c03d726e400c5691c (diff) | |
download | ffmpeg-7c71f8e0ec987863157ad5e53820dd989c37ac01.tar.gz |
pthread: mark lockless thread synchronization variables as volatile
No speed difference was meassureable
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/pthread.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c index 597aeba91f..8006ae7479 100644 --- a/libavcodec/pthread.c +++ b/libavcodec/pthread.c @@ -129,8 +129,8 @@ typedef struct PerThreadContext { /** * Array of progress values used by ff_thread_get_buffer(). */ - int progress[MAX_BUFFERS][2]; - uint8_t progress_used[MAX_BUFFERS]; + volatile int progress[MAX_BUFFERS][2]; + volatile uint8_t progress_used[MAX_BUFFERS]; AVFrame *requested_frame; ///< AVFrame the codec passed to get_buffer() } PerThreadContext; @@ -500,7 +500,7 @@ static int update_context_from_user(AVCodecContext *dst, AVCodecContext *src) static void free_progress(AVFrame *f) { PerThreadContext *p = f->owner->thread_opaque; - int *progress = f->thread_opaque; + volatile int *progress = f->thread_opaque; p->progress_used[(progress - p->progress[0]) / 2] = 0; } @@ -666,7 +666,7 @@ int ff_thread_decode_frame(AVCodecContext *avctx, void ff_thread_report_progress(AVFrame *f, int n, int field) { PerThreadContext *p; - int *progress = f->thread_opaque; + volatile int *progress = f->thread_opaque; if (!progress || progress[field] >= n) return; @@ -684,7 +684,7 @@ void ff_thread_report_progress(AVFrame *f, int n, int field) void ff_thread_await_progress(AVFrame *f, int n, int field) { PerThreadContext *p; - int *progress = f->thread_opaque; + volatile int *progress = f->thread_opaque; if (!progress || progress[field] >= n) return; @@ -911,7 +911,7 @@ void ff_thread_flush(AVCodecContext *avctx) } } -static int *allocate_progress(PerThreadContext *p) +static volatile int *allocate_progress(PerThreadContext *p) { int i; @@ -942,7 +942,8 @@ int ff_thread_can_start_frame(AVCodecContext *avctx) int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f) { PerThreadContext *p = avctx->thread_opaque; - int *progress, err; + int err; + volatile int *progress; f->owner = avctx; @@ -961,7 +962,7 @@ int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f) } pthread_mutex_lock(&p->parent->buffer_mutex); - f->thread_opaque = progress = allocate_progress(p); + f->thread_opaque = (int*)(progress = allocate_progress(p)); if (!progress) { pthread_mutex_unlock(&p->parent->buffer_mutex); |