[FFmpeg-cvslog] pthread: track thread existence in a separate variable.
Cheng Sun
git at videolan.org
Mon Nov 28 01:14:15 CET 2011
ffmpeg | branch: master | Cheng Sun <cheng.sun at ymail.com> | Sat Nov 26 16:36:50 2011 -0800| [3f5aa7dfa64c8757e5eef7b1bf870ec754e40f96] | committer: Ronald S. Bultje
pthread: track thread existence in a separate variable.
This fixes a compile error on mingw32 when using p->thread
directly (as if it were a pointer) to track thread existence,
because the type is opaque and may be a non-pointer.
Signed-off-by: Ronald S. Bultje <rsbultje at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3f5aa7dfa64c8757e5eef7b1bf870ec754e40f96
---
libavcodec/pthread.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c
index dae28e6..21e32b5 100644
--- a/libavcodec/pthread.c
+++ b/libavcodec/pthread.c
@@ -70,6 +70,7 @@ typedef struct PerThreadContext {
struct FrameThreadContext *parent;
pthread_t thread;
+ int thread_init;
pthread_cond_t input_cond; ///< Used to wait for a new packet from the main thread.
pthread_cond_t progress_cond; ///< Used by child threads to wait for progress to change.
pthread_cond_t output_cond; ///< Used by the main thread to wait for frames to finish.
@@ -651,7 +652,7 @@ static void frame_thread_free(AVCodecContext *avctx, int thread_count)
pthread_cond_signal(&p->input_cond);
pthread_mutex_unlock(&p->mutex);
- if (p->thread)
+ if (p->thread_init)
pthread_join(p->thread, NULL);
if (codec->close)
@@ -756,7 +757,8 @@ static int frame_thread_init(AVCodecContext *avctx)
if (err) goto error;
- pthread_create(&p->thread, NULL, frame_worker_thread, p);
+ if (!pthread_create(&p->thread, NULL, frame_worker_thread, p))
+ p->thread_init = 1;
}
return 0;
More information about the ffmpeg-cvslog
mailing list