From 231c6672140f019257edd26db20fbcfc2554258f Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 12 Jun 2014 00:29:53 +0200 Subject: encode: make the central lock recursive Unfortunately, there's a recursive function call in ao_lavc.c (play function), leading to a deadlock. The locking is getting a bit messy, so just make the lock recursive. This fixes #844. --- common/encode_lavc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'common/encode_lavc.c') diff --git a/common/encode_lavc.c b/common/encode_lavc.c index df5710e07a..58df2bd7d3 100644 --- a/common/encode_lavc.c +++ b/common/encode_lavc.c @@ -30,6 +30,7 @@ #include "options/m_option.h" #include "options/options.h" #include "osdep/timer.h" +#include "osdep/threads.h" #include "video/out/vo.h" #include "talloc.h" #include "stream/stream.h" @@ -174,7 +175,7 @@ struct encode_lavc_context *encode_lavc_init(struct encode_opts *options, mp_msg_force_stderr(global, true); ctx = talloc_zero(NULL, struct encode_lavc_context); - pthread_mutex_init(&ctx->lock, NULL); + mpthread_mutex_init_recursive(&ctx->lock); ctx->log = mp_log_new(ctx, global->log, "encode-lavc"); ctx->global = global; encode_lavc_discontinuity(ctx); -- cgit v1.2.3