Skip to content
Snippets Groups Projects
Commit 1cd6abdf authored by Alexandre Janniaux's avatar Alexandre Janniaux Committed by Felix Paul Kühne
Browse files

avcodec: remove useless flush

There is no requirement to call flush on exit. Indeed,
avcodec_flush_buffers is documented as needed for seeking or switching
to a different stream.

In addition, calling avcodec_flush_buffers currently triggers TSAN
warnings. Those warnings are still happening when calling the pf_flush
function from avcodec module, so it does not fix them per se, but it
does remove a systematic TSAN warning when opening/closing avcodec.

With ffmpeg at commit 73302aa193714958afb8262ceb14d9613e9df5ad:

    WARNING: ThreadSanitizer: data race (pid=749126)
      Write of size 8 at 0x7b8000053000 by thread T9:
        #0 free /usr/src/debug/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:706 (libtsan.so.2+0x4e64f)
        #1 ff_h264_free_tables src/libavcodec/h264dec.c:159 (libavcodec_plugin.so+0x24bced)
        #2 module_unneed ../../src/modules/modules.c:304 (libvlccore.so.9+0x4ce1a)
        #3 decoder_Clean ../../src/input/decoder_helpers.c:56 (libvlccore.so.9+0x8835f)
        #4 DeleteDecoder ../../src/input/decoder.c:2005 (libvlccore.so.9+0x83edd)
        #5 vlc_input_decoder_Delete ../../src/input/decoder.c:2254 (libvlccore.so.9+0x84f5c)
        #6 EsOutDestroyDecoder ../../src/input/es_out.c:2406 (libvlccore.so.9+0x97c9b)
        #7 EsOutUnselectEs ../../src/input/es_out.c:2575 (libvlccore.so.9+0x98902)
        #8 EsOutVaPrivControlLocked ../../src/input/es_out.c:3734 (libvlccore.so.9+0x9f359)
        #9 EsOutPrivControl ../../src/input/es_out.c:4028 (libvlccore.so.9+0xa1f0a)
        #10 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0xa554f)
        #11 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0xa5623)
        #12 CmdExecutePrivControl ../../src/input/es_out_timeshift.c:1809 (libvlccore.so.9+0xadb9f)
        #13 PrivControlLocked ../../src/input/es_out_timeshift.c:799 (libvlccore.so.9+0xa7c59)
        #14 PrivControl ../../src/input/es_out_timeshift.c:858 (libvlccore.so.9+0xa8428)
        #15 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0xafd79)
        #16 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0xafe4d)
        #17 es_out_SetMode ../../src/input/es_out.h:119 (libvlccore.so.9+0xafeb1)
        #18 End ../../src/input/input.c:1400 (libvlccore.so.9+0xb5ec5)
        #19 Run ../../src/input/input.c:431 (libvlccore.so.9+0xb1ba0)

      Previous write of size 8 at 0x7b8000053000 by thread T10 (mutexes: write M847):
        #0 memset /usr/src/debug/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:799 (libtsan.so.2+0x652d2)
        #1 ff_er_add_slice src/libavcodec/error_resilience.c:863 (libavcodec_plugin.so+0x866185)

      Mutex M847 (0x7b7400024ea8) created at:
        #0 pthread_mutex_init /usr/src/debug/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1295 (libtsan.so.2+0x57446)
        #1 ff_pthread_init src/libavcodec/pthread.c:122 (libavcodec_plugin.so+0x93ce3)
        #2 OpenVideoCodec ../../modules/codec/avcodec/video.c:393 (libavcodec_plugin.so+0xdaac8)
        #3 InitVideoDec ../../modules/codec/avcodec/video.c:592 (libavcodec_plugin.so+0xdbb26)
        #4 generic_start ../../src/modules/modules.c:275 (libvlccore.so.9+0x4cc3d)
        #5 vlc_module_load ../../src/modules/modules.c:243 (libvlccore.so.9+0x4c9db)
        #6 module_need ../../src/modules/modules.c:286 (libvlccore.so.9+0x4cce2)
        #7 module_need_var ../../include/vlc_modules.h:120 (libvlccore.so.9+0x7b8cb)
        #8 LoadDecoder ../../src/input/decoder.c:234 (libvlccore.so.9+0x7bea7)
        #9 CreateDecoder ../../src/input/decoder.c:1958 (libvlccore.so.9+0x83a70)
        #10 decoder_New ../../src/input/decoder.c:2111 (libvlccore.so.9+0x847ba)
        #11 vlc_input_decoder_New ../../src/input/decoder.c:2172 (libvlccore.so.9+0x84be5)
        #12 EsOutCreateDecoder ../../src/input/es_out.c:2358 (libvlccore.so.9+0x977d5)
        #13 EsOutSelectEs ../../src/input/es_out.c:2488 (libvlccore.so.9+0x98261)
        #14 EsOutSelect ../../src/input/es_out.c:2774 (libvlccore.so.9+0x992d1)
        #15 EsOutVaPrivControlLocked ../../src/input/es_out.c:3738 (libvlccore.so.9+0x9f418)
        #16 EsOutPrivControl ../../src/input/es_out.c:4028 (libvlccore.so.9+0xa1f0a)
        #17 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0xa554f)
        #18 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0xa5623)
        #19 CmdExecutePrivControl ../../src/input/es_out_timeshift.c:1809 (libvlccore.so.9+0xadb9f)
        #20 PrivControlLocked ../../src/input/es_out_timeshift.c:799 (libvlccore.so.9+0xa7c59)
        #21 PrivControl ../../src/input/es_out_timeshift.c:858 (libvlccore.so.9+0xa8428)
        #22 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0xafd79)
        #23 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0xafe4d)
        #24 es_out_SetMode ../../src/input/es_out.h:119 (libvlccore.so.9+0xafeb1)
        #25 InitPrograms ../../src/input/input.c:1227 (libvlccore.so.9+0xb5322)
        #26 Init ../../src/input/input.c:1316 (libvlccore.so.9+0xb58c9)
        #27 Run ../../src/input/input.c:426 (libvlccore.so.9+0xb1b7f)

      Thread T9 'vlc-input' (tid=749136, running) created by main thread at:
        #0 pthread_create /usr/src/debug/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1001 (libtsan.so.2+0x670c9)
        #1 vlc_clone_attr ../../src/posix/thread.c:179 (libvlccore.so.9+0x17910c)
        #2 vlc_clone ../../src/posix/thread.c:190 (libvlccore.so.9+0x1791b5)
        #3 input_Start ../../src/input/input.c:130 (libvlccore.so.9+0xb0aca)
        #4 vlc_player_input_Start ../../src/player/input.c:96 (libvlccore.so.9+0xc9640)
        #5 vlc_player_Start ../../src/player/player.c:1176 (libvlccore.so.9+0xc54be)
        #6 vlc_playlist_Start ../../src/playlist/player.c:176 (libvlccore.so.9+0x6146e)
        #7 libvlc_InternalPlay ../../src/interface/interface.c:238 (libvlccore.so.9+0x59fa4)
        #8 libvlc_playlist_play ../../lib/playlist.c:36 (libvlc.so.12+0xdd1b)
        #9 main ../../bin/vlc.c:245 (vlc-static+0x2acd)

      Thread T10 (tid=749137, running) created by thread T9 at:
        #0 pthread_create /usr/src/debug/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1001 (libtsan.so.2+0x670c9)
        #1 init_thread src/libavcodec/pthread_frame.c:834 (libavcodec_plugin.so+0x93ebd)
        #2 ff_frame_thread_init src/libavcodec/pthread_frame.c:890 (libavcodec_plugin.so+0x93ebd)
        #3 OpenVideoCodec ../../modules/codec/avcodec/video.c:393 (libavcodec_plugin.so+0xdaac8)
        #4 InitVideoDec ../../modules/codec/avcodec/video.c:592 (libavcodec_plugin.so+0xdbb26)
        #5 generic_start ../../src/modules/modules.c:275 (libvlccore.so.9+0x4cc3d)
        #6 vlc_module_load ../../src/modules/modules.c:243 (libvlccore.so.9+0x4c9db)
        #7 module_need ../../src/modules/modules.c:286 (libvlccore.so.9+0x4cce2)
        #8 module_need_var ../../include/vlc_modules.h:120 (libvlccore.so.9+0x7b8cb)
        #9 LoadDecoder ../../src/input/decoder.c:234 (libvlccore.so.9+0x7bea7)
        #10 CreateDecoder ../../src/input/decoder.c:1958 (libvlccore.so.9+0x83a70)
        #11 decoder_New ../../src/input/decoder.c:2111 (libvlccore.so.9+0x847ba)
        #12 vlc_input_decoder_New ../../src/input/decoder.c:2172 (libvlccore.so.9+0x84be5)
        #13 EsOutCreateDecoder ../../src/input/es_out.c:2358 (libvlccore.so.9+0x977d5)
        #14 EsOutSelectEs ../../src/input/es_out.c:2488 (libvlccore.so.9+0x98261)
        #15 EsOutSelect ../../src/input/es_out.c:2774 (libvlccore.so.9+0x992d1)
        #16 EsOutVaPrivControlLocked ../../src/input/es_out.c:3738 (libvlccore.so.9+0x9f418)
        #17 EsOutPrivControl ../../src/input/es_out.c:4028 (libvlccore.so.9+0xa1f0a)
        #18 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0xa554f)
        #19 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0xa5623)
        #20 CmdExecutePrivControl ../../src/input/es_out_timeshift.c:1809 (libvlccore.so.9+0xadb9f)
        #21 PrivControlLocked ../../src/input/es_out_timeshift.c:799 (libvlccore.so.9+0xa7c59)
        #22 PrivControl ../../src/input/es_out_timeshift.c:858 (libvlccore.so.9+0xa8428)
        #23 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0xafd79)
        #24 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0xafe4d)
        #25 es_out_SetMode ../../src/input/es_out.h:119 (libvlccore.so.9+0xafeb1)
        #26 InitPrograms ../../src/input/input.c:1227 (libvlccore.so.9+0xb5322)
        #27 Init ../../src/input/input.c:1316 (libvlccore.so.9+0xb58c9)
        #28 Run ../../src/input/input.c:426 (libvlccore.so.9+0xb1b7f)

SUMMARY: ThreadSanitizer: data race src/libavcodec/h264dec.c:159 in ff_h264_free_tables

Revert of commit f2f61bf1.
parent 9dfc146b
No related branches found
No related tags found
1 merge request!2117avcodec: remove useless flush
Pipeline #234606 passed with stage
in 18 minutes and 3 seconds
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment