diff options
author | Sergey <sergemp@mail.ru> | 2014-06-27 10:00:53 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-06-27 19:45:38 +0400 |
commit | 6d2df3c00a7899e9c06e3a460d64e4d0ccde0fae (patch) | |
tree | 884f3a647f7557896017881d8abff1c738565c51 | |
parent | 263932c08409a6d0dee7e4ced47a0c76e0bb8a38 (diff) |
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>
-rw-r--r-- | ffmpeg.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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; } |