[vlc-devel] Races in vlm.c
Sébastien Escudier
sebastien-devel at celeos.eu
Mon Nov 3 17:39:10 CET 2008
Hi
I think input_DetachSout in vlm.c (used two times) can't work the way it is used
:
input_StopThread( p_input );
p_instance->p_sout = input_DetachSout( p_input );
What if p_sout is used in input thread ? There is no locking here.
Another problem is that if an input thread fail to start (input.c:Init) then
sout_DeleteInstance is called here.
But it can also be called from Manage thread in vlm.c : vlm_ControlInternal(
vlm, VLM_STOP_MEDIA_INSTANCE
So we end up in vlm_MediaInstanceDelete, taking p_sout, and deleting it, while
it is also deleted at the end of input.c:Init function.
Why ? because input.c call sout_DeleteInstance while vlm.c used
input_DetachSout.
Maybe the solution would be to add a mutex on sout ?
Here is a backtrace of this happening :
#0 Close (p_this=0x82ba378) at rtp.c:561
561 if( p_sys->p_mux )
(gdb) bt
#0 Close (p_this=0x82ba378) at rtp.c:561
#1 0xb7c6577f in __module_unneed (p_this=0x82ba378, p_module=0x824e7a8) at
modules/modules.c:652
#2 0xb7c800fd in sout_StreamDelete (p_stream=0x82ba378) at
stream_output/stream_output.c:818
#3 0xb7c80d4d in sout_DeleteInstance (p_sout=0x82d05a8) at
stream_output/stream_output.c:135
#4 0xb7c84602 in vlm_MediaInstanceDelete (p_instance=0xb2b064a0) at
input/vlm.c:779
#5 0xb7c84827 in vlm_ControlMediaInstanceStop (p_vlm=0x80f8c70, id=<value
optimized out>, psz_id=0x0) at input/vlm.c:898
#6 0xb7c8614a in vlm_vaControlInternal (p_vlm=0x80f8c70, i_query=<value
optimized out>, args=<value optimized out>) at input/vlm.c:1099
#7 0xb7c869b7 in vlm_ControlInternal (p_vlm=0x80f8c70, i_query=11) at
input/vlm.c:1143
#8 0xb7c86d91 in Manage (p_object=0x80f8c70) at input/vlm.c:342
#9 0xb7f8d4fb in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#10 0xb7d7fe5e in clone () from /lib/tls/i686/cmov/libc.so.6
Regards
More information about the vlc-devel
mailing list