diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2017-03-28 20:11:43 -0400 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2017-03-31 08:26:24 -0400 |
commit | 081c21ca55d72921125848c8c2c191a6ff8b5f88 (patch) | |
tree | 4db8c3b9030371b3c21e32e9faa24b4a542abc74 | |
parent | 73f863d751df84db7a0ca1bd83cdff1b95dc94dd (diff) | |
download | ffmpeg-081c21ca55d72921125848c8c2c191a6ff8b5f88.tar.gz |
lagarith: assign correct per-thread value to LagarithContext::avctx.
This fixes race conditions reported by tsan in fate-lagarith. The races
were because each thread's LagarithContext::avctx was set to the first
thread's AVCodecContext.
-rw-r--r-- | libavcodec/lagarith.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/libavcodec/lagarith.c b/libavcodec/lagarith.c index f03305fdd4..469eec4232 100644 --- a/libavcodec/lagarith.c +++ b/libavcodec/lagarith.c @@ -730,6 +730,16 @@ static av_cold int lag_decode_init(AVCodecContext *avctx) return 0; } +#if HAVE_THREADS +static av_cold int lag_decode_init_thread_copy(AVCodecContext *avctx) +{ + LagarithContext *l = avctx->priv_data; + l->avctx = avctx; + + return 0; +} +#endif + static av_cold int lag_decode_end(AVCodecContext *avctx) { LagarithContext *l = avctx->priv_data; @@ -746,6 +756,7 @@ AVCodec ff_lagarith_decoder = { .id = AV_CODEC_ID_LAGARITH, .priv_data_size = sizeof(LagarithContext), .init = lag_decode_init, + .init_thread_copy = ONLY_IF_THREADS_ENABLED(lag_decode_init_thread_copy), .close = lag_decode_end, .decode = lag_decode_frame, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, |