Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (4)
  • Alexandre Janniaux's avatar
    input: decoder: split decoder_Init from LoadDecoder · 8daa3f65
    Alexandre Janniaux authored and Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf committed
    
    decoder_Init() is setting up p_owner->dec whereas LoadDecoder will read
    and write p_owner. To modify LoadDecoder, we want to ensure that the
    fifo is locked, but we cannot lock the fifo for LoadDecoder.
    
    Extracting the decoder_Init() ensure we can lock correctly afterwards.
    
    Co-authored-by: default avatarSteve Lhomme <robux4@ycbcr.xyz>
    8daa3f65
  • Alexandre Janniaux's avatar
    input: decoder: fix data race on decoder format · f19e27a4
    Alexandre Janniaux authored and Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf committed
    We cannot read or write the decoder object without being under the fifo
    lock, so ensure we locked first. It fixes some thread sanitizer issues
    between decoder_Init() and vlc_input_decoder_Flush().
    
        WARNING: ThreadSanitizer: data race (pid=876901)
          Read of size 8 at 0x7b7000010028 by thread T25:
            #0 vlc_input_decoder_Flush ../../src/input/decoder.c:2317 (libvlccore.so.9+0x69d7a) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #1 EsOutDestroyDecoder ../../src/input/es_out.c:2360 (libvlccore.so.9+0x716cf) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #2 EsOutUnselectEs ../../src/input/es_out.c:2534 (libvlccore.so.9+0x7a1bd) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #3 EsOutVaPrivControlLocked ../../src/input/es_out.c:3733 (libvlccore.so.9+0x75832) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #4 EsOutPrivControl ../../src/input/es_out.c:4043 (libvlccore.so.9+0x783ad) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #5 es_out_in_vaPrivControl ../../src/input/es_out_timeshift.c:464 (libvlccore.so.9+0x81a06) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #6 es_out_in_PrivControl ../../src/input/es_out_timeshift.c:474 (libvlccore.so.9+0x81a06)
            #7 CmdExecutePrivControl ../../src/input/es_out_timeshift.c:1868 (libvlccore.so.9+0x81b78) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #8 PrivControlLocked ../../src/input/es_out_timeshift.c:758 (libvlccore.so.9+0x840be) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #9 PrivControl ../../src/input/es_out_timeshift.c:817 (libvlccore.so.9+0x840be)
            #10 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0x86f7c) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #11 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0x86f7c)
            #12 es_out_SetMode ../../src/input/es_out.h:119 (libvlccore.so.9+0x91ba9) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #13 End ../../src/input/input.c:1425 (libvlccore.so.9+0x91ba9)
            #14 Run ../../src/input/input.c:431 (libvlccore.so.9+0x920d4) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
    
          Previous write of size 8 at 0x7b7000010028 by thread T27:
            #0 decoder_Init ../../src/input/decoder_helpers.c:50 (libvlccore.so.9+0x6c1ce) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #1 LoadDecoder ../../src/input/decoder.c:370 (libvlccore.so.9+0x672ae) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #2 DecoderThread_Reload ../../src/input/decoder.c:431 (libvlccore.so.9+0x67593) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #3 DecoderThread_ProcessInput ../../src/input/decoder.c:1595 (libvlccore.so.9+0x687f9) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #4 DecoderThread_DecodeBlock ../../src/input/decoder.c:1562 (libvlccore.so.9+0x6865b) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #5 DecoderThread_ProcessInput ../../src/input/decoder.c:1667 (libvlccore.so.9+0x6895e) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
            #6 DecoderThread ../../src/input/decoder.c:1795 (libvlccore.so.9+0x6a487) (BuildId: 1912c3713753e3bafbd8f9b735ec069a39be1f4d)
    f19e27a4
  • Alexandre Janniaux's avatar
    input: decoder: lock fifo when reloading decoder · 6369ea50
    Alexandre Janniaux authored and Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf committed
    Reloading the decoder was never protected against races because
    processing an input frame was done unprotected. The rationale behind was
    that we cannot lock the vlc_input_decoder_t FIFO when calling any
    function from the decoder_t object implementation.
    
    This commit is broadening the locks everywhere but when:
     - the decoder is created (LoadDecoder)
     - the decoder is destroyed (decoder_Clean)
     - the decode callback is called on the decoder (decoder_t::pf_decode)
    
    It fixes race conditions on the outputs (audio, video) and the usage of
    the dec_fmt_in structure.
    
        WARNING: ThreadSanitizer: data race (pid=2404868)
          Write of size 8 at 0x7b7000010028 by thread T27:
            #0 decoder_Init ../../src/input/decoder_helpers.c:50 (libvlccore.so.9+0x6c1fe) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #1 DecoderThread_Reload ../../src/input/decoder.c:428 (libvlccore.so.9+0x67581) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #2 DecoderThread_ProcessInput ../../src/input/decoder.c:1593 (libvlccore.so.9+0x68829) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #3 DecoderThread_DecodeBlock ../../src/input/decoder.c:1560 (libvlccore.so.9+0x6868b) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #4 DecoderThread_ProcessInput ../../src/input/decoder.c:1665 (libvlccore.so.9+0x6898e) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #5 DecoderThread ../../src/input/decoder.c:1793 (libvlccore.so.9+0x6a4b7) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
    
          Previous read of size 8 at 0x7b7000010028 by thread T25:
            #0 vlc_input_decoder_Flush ../../src/input/decoder.c:2318 (libvlccore.so.9+0x69dc2) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #1 EsOutDestroyDecoder ../../src/input/es_out.c:2360 (libvlccore.so.9+0x716ff) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #2 EsOutUnselectEs ../../src/input/es_out.c:2534 (libvlccore.so.9+0x7a1ed) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #3 EsOutVaPrivControlLocked ../../src/input/es_out.c:3733 (libvlccore.so.9+0x75862) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #4 EsOutPrivControl ../../src/input/es_out.c:4043 (libvlccore.so.9+0x783dd) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #5 es_out_in_vaPrivControl ../../src/input/es_out_timeshift.c:464 (libvlccore.so.9+0x81a36) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #6 es_out_in_PrivControl ../../src/input/es_out_timeshift.c:474 (libvlccore.so.9+0x81a36)
            #7 CmdExecutePrivControl ../../src/input/es_out_timeshift.c:1868 (libvlccore.so.9+0x81ba8) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #8 PrivControlLocked ../../src/input/es_out_timeshift.c:758 (libvlccore.so.9+0x840ee) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #9 PrivControl ../../src/input/es_out_timeshift.c:817 (libvlccore.so.9+0x840ee)
            #10 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0x86fac) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #11 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0x86fac)
            #12 es_out_SetMode ../../src/input/es_out.h:119 (libvlccore.so.9+0x91bd9) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #13 End ../../src/input/input.c:1425 (libvlccore.so.9+0x91bd9)
            #14 Run ../../src/input/input.c:431 (libvlccore.so.9+0x92104) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
    
          Location is heap block of size 2008 at 0x7b7000010000 allocated by thread T25:
            #0 calloc /usr/src/debug/gcc/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:701 (libtsan.so.2+0x43413) (BuildId: 7e8fcb9ed0a63b98f2293e37c92ac955413efd9e)
            #1 vlc_custom_create ../../src/misc/objects.c:97 (libvlccore.so.9+0x10e4c3) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #2 CreateDecoder ../../src/input/decoder.c:1873 (libvlccore.so.9+0x676cf) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #3 decoder_New ../../src/input/decoder.c:2132 (libvlccore.so.9+0x676cf)
            #4 vlc_input_decoder_New ../../src/input/decoder.c:2191 (libvlccore.so.9+0x698a0) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #5 EsOutCreateDecoder ../../src/input/es_out.c:2302 (libvlccore.so.9+0x786da) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #6 EsOutSelectEs ../../src/input/es_out.c:2444 (libvlccore.so.9+0x78ec3) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #7 EsOutSelect ../../src/input/es_out.c:2733 (libvlccore.so.9+0x7935a) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #8 EsOutVaPrivControlLocked ../../src/input/es_out.c:3737 (libvlccore.so.9+0x7713c) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #9 EsOutPrivControl ../../src/input/es_out.c:4043 (libvlccore.so.9+0x783dd) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #10 es_out_in_vaPrivControl ../../src/input/es_out_timeshift.c:464 (libvlccore.so.9+0x81a36) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #11 es_out_in_PrivControl ../../src/input/es_out_timeshift.c:474 (libvlccore.so.9+0x81a36)
            #12 CmdExecutePrivControl ../../src/input/es_out_timeshift.c:1868 (libvlccore.so.9+0x81ba8) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #13 PrivControlLocked ../../src/input/es_out_timeshift.c:758 (libvlccore.so.9+0x840ee) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #14 PrivControl ../../src/input/es_out_timeshift.c:817 (libvlccore.so.9+0x840ee)
            #15 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0x86fac) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #16 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0x86fac)
            #17 es_out_SetMode ../../src/input/es_out.h:119 (libvlccore.so.9+0x8d118) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #18 InitPrograms ../../src/input/input.c:1262 (libvlccore.so.9+0x8d118)
            #19 Init ../../src/input/input.c:1343 (libvlccore.so.9+0x8d118)
            #20 Run ../../src/input/input.c:426 (libvlccore.so.9+0x92064) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
    
          Thread T27 'vlc-dec-video' (tid=2404917, running) created by thread T25 at:
            #0 pthread_create /usr/src/debug/gcc/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1036 (libtsan.so.2+0x44219) (BuildId: 7e8fcb9ed0a63b98f2293e37c92ac955413efd9e)
            #1 vlc_clone_attr ../../src/posix/thread.c:180 (libvlccore.so.9+0x11f789) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #2 vlc_clone ../../src/posix/thread.c:191 (libvlccore.so.9+0x11f789)
            #3 decoder_New ../../src/input/decoder.c:2169 (libvlccore.so.9+0x67eea) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #4 vlc_input_decoder_New ../../src/input/decoder.c:2191 (libvlccore.so.9+0x698a0) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #5 EsOutCreateDecoder ../../src/input/es_out.c:2302 (libvlccore.so.9+0x786da) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #6 EsOutSelectEs ../../src/input/es_out.c:2444 (libvlccore.so.9+0x78ec3) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #7 EsOutSelect ../../src/input/es_out.c:2733 (libvlccore.so.9+0x7935a) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #8 EsOutVaPrivControlLocked ../../src/input/es_out.c:3737 (libvlccore.so.9+0x7713c) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #9 EsOutPrivControl ../../src/input/es_out.c:4043 (libvlccore.so.9+0x783dd) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #10 es_out_in_vaPrivControl ../../src/input/es_out_timeshift.c:464 (libvlccore.so.9+0x81a36) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #11 es_out_in_PrivControl ../../src/input/es_out_timeshift.c:474 (libvlccore.so.9+0x81a36)
            #12 CmdExecutePrivControl ../../src/input/es_out_timeshift.c:1868 (libvlccore.so.9+0x81ba8) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #13 PrivControlLocked ../../src/input/es_out_timeshift.c:758 (libvlccore.so.9+0x840ee) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #14 PrivControl ../../src/input/es_out_timeshift.c:817 (libvlccore.so.9+0x840ee)
            #15 es_out_vaPrivControl ../../src/input/es_out.h:105 (libvlccore.so.9+0x86fac) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #16 es_out_PrivControl ../../src/input/es_out.h:112 (libvlccore.so.9+0x86fac)
            #17 es_out_SetMode ../../src/input/es_out.h:119 (libvlccore.so.9+0x8d118) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #18 InitPrograms ../../src/input/input.c:1262 (libvlccore.so.9+0x8d118)
            #19 Init ../../src/input/input.c:1343 (libvlccore.so.9+0x8d118)
            #20 Run ../../src/input/input.c:426 (libvlccore.so.9+0x92064) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
    
          Thread T25 'vlc-input' (tid=2404915, running) created by main thread at:
            #0 pthread_create /usr/src/debug/gcc/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1036 (libtsan.so.2+0x44219) (BuildId: 7e8fcb9ed0a63b98f2293e37c92ac955413efd9e)
            #1 vlc_clone_attr ../../src/posix/thread.c:180 (libvlccore.so.9+0x11f789) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #2 vlc_clone ../../src/posix/thread.c:191 (libvlccore.so.9+0x11f789)
            #3 input_Start ../../src/input/input.c:131 (libvlccore.so.9+0x8a4a3) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #4 vlc_player_input_Start ../../src/player/input.c:96 (libvlccore.so.9+0x9e4a2) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #5 vlc_player_Start ../../src/player/player.c:1177 (libvlccore.so.9+0x998f0) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #6 play_scenario ../../test/src/input/decoder/input_decoder.c:260 (test_src_input_decoder+0x3295) (BuildId: 37860f3bd060e79331c2c7c0168bd76a7e275f6e)
            #7 OpenIntf ../../test/src/input/decoder/input_decoder.c:289 (test_src_input_decoder+0x3295)
            #8 generic_start ../../src/modules/modules.c:280 (libvlccore.so.9+0x3fca9) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #9 vlc_module_load ../../src/modules/modules.c:248 (libvlccore.so.9+0x40992) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #10 module_need ../../src/modules/modules.c:291 (libvlccore.so.9+0x40c39) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #11 intf_Create ../../src/interface/interface.c:173 (libvlccore.so.9+0x49a3a) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #12 libvlc_InternalAddIntf ../../src/interface/interface.c:268 (libvlccore.so.9+0x49e71) (BuildId: 177c3c73d277ee30e8dd794a139cdeda1889ec4d)
            #13 libvlc_add_intf ../../lib/playlist.c:41 (libvlc.so.12+0xd678) (BuildId: 9df6c3ada3ed68d6ad4df6e6a25454ae0f0d2376)
            #14 main ../../test/src/input/decoder/input_decoder.c:351 (test_src_input_decoder+0x2584) (BuildId: 37860f3bd060e79331c2c7c0168bd76a7e275f6e)
    
        SUMMARY: ThreadSanitizer: data race ../../src/input/decoder_helpers.c:50 in decoder_Init
        ==================
    
    Fixes #27582
    6369ea50
  • Steve Lhomme's avatar
    input: decoder: remove p_dec shortcut · 55ad5969
    Steve Lhomme authored and Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf committed
    p_dec is only used once, and p_dec->fmt_int references dec_fmt_in so
    inline the p_owner->dec and dec->fmt_in in the call to avoid the
    intermediate variable.
    55ad5969
......@@ -364,11 +364,8 @@ static void Decoder_UpdateOutState(vlc_input_decoder_t *owner)
/**
* Load a decoder module
*/
static int LoadDecoder( decoder_t *p_dec, bool b_packetizer, es_format_t *fmt_in,
const es_format_t *restrict p_fmt )
static int LoadDecoder(decoder_t *p_dec, bool b_packetizer, es_format_t *fmt_in)
{
decoder_Init( p_dec, fmt_in, p_fmt );
p_dec->b_frame_drop_allowed = true;
/* Find a suitable decoder/packetizer module */
......@@ -408,7 +405,9 @@ static int DecoderThread_Reload( vlc_input_decoder_t *p_owner,
}
/* Restart the decoder module */
vlc_fifo_Unlock(p_owner->p_fifo);
decoder_Clean( p_dec );
vlc_fifo_Lock(p_owner->p_fifo);
es_format_Clean( &p_owner->dec_fmt_in );
p_owner->error = false;
......@@ -428,12 +427,16 @@ static int DecoderThread_Reload( vlc_input_decoder_t *p_owner,
}
}
if( LoadDecoder( p_dec, false, &p_owner->dec_fmt_in, &fmt_in ) )
decoder_Init(p_dec, &p_owner->dec_fmt_in, &fmt_in);
vlc_fifo_Unlock(p_owner->p_fifo);
if (LoadDecoder(p_dec, false, &p_owner->dec_fmt_in))
{
vlc_fifo_Lock(p_owner->p_fifo);
p_owner->error = true;
es_format_Clean( &fmt_in );
return VLC_EGENERIC;
}
vlc_fifo_Lock(p_owner->p_fifo);
es_format_Clean( &fmt_in );
return VLC_SUCCESS;
}
......@@ -1538,6 +1541,8 @@ static void DecoderThread_DecodeBlock( vlc_input_decoder_t *p_owner, vlc_frame_t
decoder_t *p_dec = &p_owner->dec;
struct vlc_tracer *tracer = vlc_object_get_tracer( &p_dec->obj );
vlc_fifo_Unlock(p_owner->p_fifo);
if ( tracer != NULL && frame != NULL )
{
vlc_tracer_TraceStreamDTS( tracer, "DEC", p_owner->psz_id, "IN",
......@@ -1545,6 +1550,8 @@ static void DecoderThread_DecodeBlock( vlc_input_decoder_t *p_owner, vlc_frame_t
}
int ret = p_dec->pf_decode( p_dec, frame );
vlc_fifo_Lock(p_owner->p_fifo);
switch( ret )
{
case VLCDEC_SUCCESS:
......@@ -1602,9 +1609,7 @@ static void DecoderThread_ProcessInput( vlc_input_decoder_t *p_owner, vlc_frame_
if( frame->i_buffer <= 0 )
goto error;
vlc_fifo_Lock(p_owner->p_fifo);
DecoderUpdatePreroll( &p_owner->i_preroll_end, frame );
vlc_fifo_Unlock(p_owner->p_fifo);
if( unlikely( frame->i_flags & BLOCK_FLAG_CORE_PRIVATE_RELOADED ) )
{
/* This frame has already been packetized */
......@@ -1614,7 +1619,9 @@ static void DecoderThread_ProcessInput( vlc_input_decoder_t *p_owner, vlc_frame_
if( p_owner->p_sout != NULL )
{
vlc_fifo_Unlock(p_owner->p_fifo);
DecoderThread_ProcessSout( p_owner, frame );
vlc_fifo_Lock(p_owner->p_fifo);
return;
}
if( packetize )
......@@ -1650,6 +1657,7 @@ static void DecoderThread_ProcessInput( vlc_input_decoder_t *p_owner, vlc_frame_
packetized_frame->p_next = NULL;
DecoderThread_DecodeBlock( p_owner, packetized_frame );
if( p_owner->error )
{
block_ChainRelease( p_next );
......@@ -1790,11 +1798,11 @@ static void *DecoderThread( void *p_data )
* drain. Pass frame = NULL to decoder just once. */
}
vlc_fifo_Unlock( p_owner->p_fifo );
/* DecoderThread_ProcessInput will unlock when playing to the decoders
* but will ensure it re-locks in the end. This is necessary to handle
* reloading, CC and packetizing. */
DecoderThread_ProcessInput( p_owner, frame );
vlc_fifo_Lock(p_owner->p_fifo);
if( p_owner->b_draining && frame == NULL )
{
p_owner->b_draining = false;
......@@ -1937,7 +1945,8 @@ CreateDecoder( vlc_object_t *p_parent, const struct vlc_input_decoder_cfg *cfg )
vlc_custom_create( p_parent, sizeof( decoder_t ), "packetizer" );
if( p_owner->p_packetizer )
{
if( LoadDecoder( p_owner->p_packetizer, true, &p_owner->pktz_fmt_in, fmt ) )
decoder_Init(p_owner->p_packetizer, &p_owner->pktz_fmt_in, fmt);
if (LoadDecoder(p_owner->p_packetizer, true, &p_owner->pktz_fmt_in))
{
vlc_object_delete(p_owner->p_packetizer);
p_owner->p_packetizer = NULL;
......@@ -1970,7 +1979,8 @@ CreateDecoder( vlc_object_t *p_parent, const struct vlc_input_decoder_cfg *cfg )
}
/* Find a suitable decoder/packetizer module */
if( LoadDecoder( p_dec, cfg->sout != NULL, &p_owner->dec_fmt_in, fmt ) )
decoder_Init(p_dec, &p_owner->dec_fmt_in, fmt);
if (LoadDecoder(p_dec, cfg->sout != NULL, &p_owner->dec_fmt_in))
return p_owner;
assert( p_dec->fmt_in->i_cat == p_dec->fmt_out.i_cat && fmt->i_cat == p_dec->fmt_in->i_cat);
......@@ -2208,8 +2218,6 @@ vlc_input_decoder_Create( vlc_object_t *p_parent, const es_format_t *fmt, const
void vlc_input_decoder_Delete( vlc_input_decoder_t *p_owner )
{
decoder_t *p_dec = &p_owner->dec;
vlc_fifo_Lock( p_owner->p_fifo );
p_owner->aborting = true;
p_owner->b_waiting = false;
......@@ -2229,7 +2237,7 @@ void vlc_input_decoder_Delete( vlc_input_decoder_t *p_owner )
}
/* Delete decoder */
DeleteDecoder( p_owner, p_dec->fmt_in->i_cat );
DeleteDecoder(p_owner, p_owner->dec_fmt_in.i_cat);
}
void vlc_input_decoder_Decode( vlc_input_decoder_t *p_owner, vlc_frame_t *frame,
......@@ -2239,7 +2247,9 @@ void vlc_input_decoder_Decode( vlc_input_decoder_t *p_owner, vlc_frame_t *frame,
{
/* DecoderThread's fifo should be empty as no decoder thread is running. */
assert( vlc_fifo_IsEmpty( p_owner->p_fifo ) );
vlc_fifo_Lock(p_owner->p_fifo);
DecoderThread_ProcessInput( p_owner, frame );
vlc_fifo_Unlock(p_owner->p_fifo);
return;
}
......@@ -2301,7 +2311,9 @@ void vlc_input_decoder_Drain( vlc_input_decoder_t *p_owner )
if ( vlc_input_decoder_IsSynchronous( p_owner ) )
{
/* Process a NULL frame synchronously to signal draining to packetizer/decoder. */
vlc_fifo_Lock(p_owner->p_fifo);
DecoderThread_ProcessInput( p_owner, NULL );
vlc_fifo_Unlock(p_owner->p_fifo);
return;
}
......@@ -2313,9 +2325,8 @@ void vlc_input_decoder_Drain( vlc_input_decoder_t *p_owner )
void vlc_input_decoder_Flush( vlc_input_decoder_t *p_owner )
{
enum es_format_category_e cat = p_owner->dec.fmt_in->i_cat;
vlc_fifo_Lock( p_owner->p_fifo );
enum es_format_category_e cat = p_owner->dec.fmt_in->i_cat;
/* Empty the fifo */
block_ChainRelease( vlc_fifo_DequeueAllUnlocked( p_owner->p_fifo ) );
......