[vlc-devel] [PATCH] decoder: assert that out_pool is valid from buffer_new

Francois Cartegnie fcvlcdev at free.fr
Tue Mar 10 10:03:21 CET 2020


Le 10/03/2020 à 08:58, Thomas Guillem a écrit :
> Once the format is configured, the out_pool need to stay valid during the life
> time of the module or until a new format is requested.
> ---
>  src/input/decoder.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/src/input/decoder.c b/src/input/decoder.c
> index 7dbc2b8f8d..be6c916342 100644
> --- a/src/input/decoder.c
> +++ b/src/input/decoder.c
> @@ -650,6 +650,7 @@ static picture_t *ModuleThread_NewVideoBuffer( decoder_t *p_dec )
>  {
>      struct decoder_owner *p_owner = dec_get_owner( p_dec );
>      assert( p_owner->p_vout );
> +    assert( p_owner->out_pool );
>  
>      picture_t *pic = picture_pool_Wait( p_owner->out_pool );
>      if (pic)
> 


Just makes things abort somewhere else...


#0  0x00007f012be83625 in raise () at /lib64/libc.so.6
#1  0x00007f012be6c8d9 in abort () at /lib64/libc.so.6
#2  0x00007f012be6c7a9 in _nl_load_domain.cold () at /lib64/libc.so.6
#3  0x00007f012be7ba66 in annobin_assert.c_end () at /lib64/libc.so.6
#4  0x00007f012c29025e in vlc_player_RemoveTimerSource
(player=player at entry=0xbf48c0, es_source=0x7f00d0060350)
    at ../../vlc/src/player/timer.c:382
#5  0x00007f012c28e785 in vlc_player_input_HandleEsEvent
(ev=0x7f00e54694f8, input=0xc38920) at ../../vlc/src/player/input.c:489
#6  input_thread_Events (input_thread=<optimized out>,
event=0x7f00e54694f0, user_data=0xc38920) at
../../vlc/src/player/input.c:738
#7  0x00007f012c26ef19 in input_SendEvent (event=0x7f00e54694f0,
p_input=<optimized out>) at ../../vlc/src/input/event.h:35
#8  input_SendEventEs (es_event=<optimized out>, p_input=<optimized
out>) at ../../vlc/src/input/event.h:246
#9  EsOutSendEsEvent (out=out at entry=0xc407d8, es=<optimized out>,
action=action at entry=4, forced=forced at entry=false)
    at ../../vlc/src/input/es_out.c:1228
#10 0x00007f012c27146c in EsOutUnselectEs (out=out at entry=0xc407d8,
es=<optimized out>, b_update=b_update at entry=true)
    at ../../vlc/src/input/es_out.c:2398
#11 0x00007f012c2717ba in EsOutSelect (out=out at entry=0xc407d8,
es=es at entry=0x7f00d002cc50, b_force=b_force at entry=true)
    at ../../vlc/src/input/es_out.c:2442
#12 0x00007f012c2774f0 in EsOutVaControlLocked
    (out=out at entry=0xc407d8, source=source at entry=0xc395d0,
i_query=i_query at entry=0, args=args at entry=0x7f00e54696c0)
    at ../../vlc/src/input/es_out.c:3034
#13 0x00007f012c278e1a in EsOutControl (out=0xc407d8, source=0xc395d0,
i_query=0, args=0x7f00e54696c0)
    at ../../vlc/src/input/es_out.c:3755
#14 0x00007f012c2790f0 in es_out_in_vaControl (args=0x7f00e54696c0,
i_query=<optimized out>, in=<optimized out>, p_out=<optimized out>)
    at ../../vlc/src/input/es_out_timeshift.c:509
#15 es_out_in_Control (p_out=<optimized out>, in=<optimized out>,
i_query=<optimized out>) at ../../vlc/src/input/es_out_timeshift.c:509
#16 0x00007f012c27a720 in ControlLocked (args=<optimized out>,
i_query=<optimized out>, in=<optimized out>, p_out=0x7f00d0000fa8)
    at ../../vlc/src/input/es_out_timeshift.c:670
#17 Control (p_out=0x7f00d0000fa8, in=<optimized out>,
i_query=<optimized out>, args=<optimized out>)
    at ../../vlc/src/input/es_out_timeshift.c:758
#18 0x00007f00dad061bd in es_out_vaControl (args=0x7f00e5469830,
i_query=0, out=<optimized out>) at ../../vlc/include/vlc_es_out.h:175
#19 es_out_Control(es_out_t*, int, ...) (out=<optimized out>,
i_query=i_query at entry=0) at ../../vlc/include/vlc_es_out.h:175
#20 0x00007f00dad070c7 in
adaptive::FakeESOut::createOrRecycleRealEsID(adaptive::FakeESOutID*)
(this=0x7f00d00124c0, es_id=0x7f00c000f370)
    at ../../vlc/modules/demux/adaptive/plumbing/FakeESOut.cpp:284
#21 0x00007f00dad04a1f in adaptive::CommandsQueue::Process(es_out_t*, long)
    (this=0x7f00d00242d0, out=0x7f00d0000fa8, barrier=<optimized out>)
at ../../vlc/modules/demux/adaptive/plumbing/CommandsQueue.cpp:379
#22 0x00007f00dad0fc2a in adaptive::AbstractStream::dequeue(long, long*)
    (this=0x7f00d0020930, nz_deadline=930216058333,
pi_pcr=0x7f00e5469be0) at ../../vlc/modules/demux/adaptive/Streams.cpp:742
#23 0x00007f00dad091ce in adaptive::PlaylistManager::dequeue(long, long*)
    (this=this at entry=0x7f00d0024040, i_floor=930216008333,
pi_nzbarrier=pi_nzbarrier at entry=0x7f00e5469c30)
    at ../../vlc/modules/demux/adaptive/PlaylistManager.cpp:280
#24 0x00007f00dad0a2d9 in adaptive::PlaylistManager::doDemux(long)
(this=0x7f00d0024040, increment=50000)
    at ../../vlc/modules/demux/adaptive/PlaylistManager.cpp:441
#25 0x00007f00dad0951a in
adaptive::PlaylistManager::demux_callback(stream_t*) (p_demux=<optimized
out>)
    at ../../vlc/modules/demux/adaptive/PlaylistManager.cpp:409
#26 0x00007f012c2833be in demux_Demux (p_demux=0x7f00d000ff50) at
../../vlc/include/vlc_demux.h:297
#27 MainLoopDemux (pb_changed=<synthetic pointer>, p_input=0xc38b20) at
../../vlc/src/input/input.c:550
#28 MainLoop (p_input=p_input at entry=0xc38b20,
b_interactive=b_interactive at entry=true) at ../../vlc/src/input/input.c:696
#29 0x00007f012c2846b3 in Run (data=0xc38b20) at
../../vlc/src/input/input.c:477
#30 0x00007f012c01b4e2 in start_thread () at /lib64/libpthread.so.0
#31 0x00007f012bf486d3 in clone () at /lib64/libc.so.6


-- 
Francois Cartegnie
VideoLAN - VLC Developer


More information about the vlc-devel mailing list