mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-25 16:53:20 +00:00
avutil/slicethread: Check pthread_*_init() for failure
Fixes: CID1604383 Unchecked return value Fixes: CID1604439 Unchecked return value Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
15540b3d28
commit
23851c9ee0
@ -102,6 +102,7 @@ int avpriv_slicethread_create(AVSliceThread **pctx, void *priv,
|
|||||||
{
|
{
|
||||||
AVSliceThread *ctx;
|
AVSliceThread *ctx;
|
||||||
int nb_workers, i;
|
int nb_workers, i;
|
||||||
|
int ret;
|
||||||
|
|
||||||
av_assert0(nb_threads >= 0);
|
av_assert0(nb_threads >= 0);
|
||||||
if (!nb_threads) {
|
if (!nb_threads) {
|
||||||
@ -135,16 +136,37 @@ int avpriv_slicethread_create(AVSliceThread **pctx, void *priv,
|
|||||||
|
|
||||||
atomic_init(&ctx->first_job, 0);
|
atomic_init(&ctx->first_job, 0);
|
||||||
atomic_init(&ctx->current_job, 0);
|
atomic_init(&ctx->current_job, 0);
|
||||||
pthread_mutex_init(&ctx->done_mutex, NULL);
|
ret = pthread_mutex_init(&ctx->done_mutex, NULL);
|
||||||
pthread_cond_init(&ctx->done_cond, NULL);
|
if (ret) {
|
||||||
|
av_freep(&ctx->workers);
|
||||||
|
av_freep(pctx);
|
||||||
|
return AVERROR(ret);
|
||||||
|
}
|
||||||
|
ret = pthread_cond_init(&ctx->done_cond, NULL);
|
||||||
|
if (ret) {
|
||||||
|
ctx->nb_threads = main_func ? 0 : 1;
|
||||||
|
avpriv_slicethread_free(pctx);
|
||||||
|
return AVERROR(ret);
|
||||||
|
}
|
||||||
ctx->done = 0;
|
ctx->done = 0;
|
||||||
|
|
||||||
for (i = 0; i < nb_workers; i++) {
|
for (i = 0; i < nb_workers; i++) {
|
||||||
WorkerContext *w = &ctx->workers[i];
|
WorkerContext *w = &ctx->workers[i];
|
||||||
int ret;
|
int ret;
|
||||||
w->ctx = ctx;
|
w->ctx = ctx;
|
||||||
pthread_mutex_init(&w->mutex, NULL);
|
ret = pthread_mutex_init(&w->mutex, NULL);
|
||||||
pthread_cond_init(&w->cond, NULL);
|
if (ret) {
|
||||||
|
ctx->nb_threads = main_func ? i : i + 1;
|
||||||
|
avpriv_slicethread_free(pctx);
|
||||||
|
return AVERROR(ret);
|
||||||
|
}
|
||||||
|
ret = pthread_cond_init(&w->cond, NULL);
|
||||||
|
if (ret) {
|
||||||
|
pthread_mutex_destroy(&w->mutex);
|
||||||
|
ctx->nb_threads = main_func ? i : i + 1;
|
||||||
|
avpriv_slicethread_free(pctx);
|
||||||
|
return AVERROR(ret);
|
||||||
|
}
|
||||||
pthread_mutex_lock(&w->mutex);
|
pthread_mutex_lock(&w->mutex);
|
||||||
w->done = 0;
|
w->done = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user