[vlc-devel] [RFC] Deadlock situation in input.c in create( ... ), with playlist
Rafaël Carré
funman at videolan.org
Sun Mar 16 00:08:51 CET 2008
On Sat, 2008-03-15 at 23:32 +0100, Andre Weber wrote:
> Hello,
>
> we have a deadlock situation in the function
>
> input.c - in the method
>
> static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item,
> const char *psz_header, vlc_bool_t b_quick, sout_instance_t *p_sout )
>
> the deadlock occurs durring the /* Parse input options */ code, for normal files it couldn't happen
> but if you try to open a avi with subtitles, or open the Direct Show streaming on windows f.e.
> (just checking the subtitles options without haveing them is sufficent to get the deadlock)
>
> and you have the "security policy" set to "ask" - we are stuck in this code block:
>
> /* Parse input options */
> vlc_mutex_lock( &p_item->lock );
> for( i = 0; i < p_item->i_options; i++ )
> var_OptionParse( VLC_OBJECT(p_input), p_item->ppsz_options[i] );
> vlc_mutex_unlock( &p_item->lock );
>
> because var_OptionParse( ... ) calls the function intf_UserYesNo( ... ) this function tries to show a dialog
> the event to do this is passed through the thread loop of the playlist thread.c function RunControlThread( ... )
> but at this time - the thread is still in the function playlist_MainLoop( .. ) and is waiting for the completion
> of the method playlist_PlayItem( ... ) --> and this functions waits for the return of var_OptionParse( ... )
> and so long this is running the thread loop couldn't process the call to intf_InteractionManage( ... )
I don't understand what's the link between interaction and playlist, so
the interaction just should be moved in its own thread.
Also I notice that playlist_MainLoop() is not a loop ... the loop is
RunControlThread()
> We (Atmo & Ivoire) tried to move the var_OptionParse( ... ) into the input thread - from the logic
> that shouldn't make any difference - but this also didn't work - because inside the thread we failed
> on the locked playlist mutex inside the function interaction.c : InteractionGet( ... ) ... that was the
> point where I gave up ... without any idea - which wouldn't be a hack or kludge.
> (I tried to unlock the playlist durring thread creation but that didn't helped ...)
>
>
> Any ideas are welcome? funman whats about you?
>
I think moving the interaction in its own thread (in libvlc) is the solution (and it could be disabled if --interact is false)
--
Rafaël Carré <funman at videolan.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20080316/4332c830/attachment.sig>
More information about the vlc-devel
mailing list