aboutsummaryrefslogtreecommitdiffstats
path: root/ffmpeg.c
diff options
context:
space:
mode:
authorSergey <sergemp@mail.ru>2014-06-27 10:00:53 +0400
committerMichael Niedermayer <michaelni@gmx.at>2014-06-27 17:45:38 +0200
commit6d2df3c00a7899e9c06e3a460d64e4d0ccde0fae (patch)
tree884f3a647f7557896017881d8abff1c738565c51 /ffmpeg.c
parent263932c08409a6d0dee7e4ced47a0c76e0bb8a38 (diff)
downloadffmpeg-6d2df3c00a7899e9c06e3a460d64e4d0ccde0fae.tar.gz
ffmpeg: fix deadlock regression in threading error handing
Commit fc9c857c introduced deadlock regression when processing too many inputs: ffmpeg $(seq -f " -f lavfi -i aevalsrc=0:d=%.0f" 70) -vf concat=n=70:v=0:a=1 -f null - Happens for different number of inputs, depending on available memory size, overcommit settings, ulimits, etc. Easily noticeable for 32-bit builds, that exhaust address space allocating 8-10 MB stack for each thread. Earlier ffmpeg versions exited with unhelpful "Conversion failed!" message. This patch fixes both problems: it frees the queue to prevent deadlock and adds a meaningful error message if pthread_create() fails. Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'ffmpeg.c')
-rw-r--r--ffmpeg.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 2c17525286..3d23ee6861 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -3237,8 +3237,11 @@ static int init_input_threads(void)
if (ret < 0)
return ret;
- if ((ret = pthread_create(&f->thread, NULL, input_thread, f)))
+ if ((ret = pthread_create(&f->thread, NULL, input_thread, f))) {
+ av_log(NULL, AV_LOG_ERROR, "pthread_create failed: %s. Try to increase `ulimit -v` or decrease `ulimit -s`.\n", strerror(ret));
+ av_thread_message_queue_free(&f->in_thread_queue);
return AVERROR(ret);
+ }
}
return 0;
}