Commit f1670436 authored by Laurent Aimar's avatar Laurent Aimar

Revert "Another small decoder thread simplification"

This reverts commit 3c9681e1.
It breaks DMO/Qt decoding. It can be commited again when a fix
is found.
parent 0357e2cf
...@@ -297,8 +297,13 @@ void input_DecoderDelete( decoder_t *p_dec ) ...@@ -297,8 +297,13 @@ void input_DecoderDelete( decoder_t *p_dec )
} }
vlc_mutex_unlock( &p_owner->lock ); vlc_mutex_unlock( &p_owner->lock );
/* Make sure the thread leaves the function */
block_FifoWake( p_owner->p_fifo );
vlc_thread_join( p_dec ); vlc_thread_join( p_dec );
module_unneed( p_dec, p_dec->p_module );
/* Don't module_unneed() here because of the dll loader that wants
* close() in the same thread than open()/decode() */
/* */ /* */
if( p_dec->p_owner->cc.b_supported ) if( p_dec->p_owner->cc.b_supported )
...@@ -764,12 +769,13 @@ static void *DecoderThread( vlc_object_t *p_this ) ...@@ -764,12 +769,13 @@ static void *DecoderThread( vlc_object_t *p_this )
decoder_t *p_dec = (decoder_t *)p_this; decoder_t *p_dec = (decoder_t *)p_this;
decoder_owner_sys_t *p_owner = p_dec->p_owner; decoder_owner_sys_t *p_owner = p_dec->p_owner;
int canc = vlc_savecancel();
/* The decoder's main loop */ /* The decoder's main loop */
for (;;) while( vlc_object_alive( p_dec ) )
{ {
block_t *p_block = block_FifoGet( p_owner->p_fifo ); block_t *p_block = block_FifoGet( p_owner->p_fifo );
/* Make sure there is no cancellation point other than this one^^.
* If you need one, be sure to push cleanup of p_block. */
DecoderSignalBuffering( p_dec, p_block == NULL ); DecoderSignalBuffering( p_dec, p_block == NULL );
if( p_block ) if( p_block )
...@@ -786,6 +792,11 @@ static void *DecoderThread( vlc_object_t *p_this ) ...@@ -786,6 +792,11 @@ static void *DecoderThread( vlc_object_t *p_this )
} }
DecoderSignalBuffering( p_dec, true ); DecoderSignalBuffering( p_dec, true );
/* We do it here because of the dll loader that wants close() in the
* same thread than open()/decode() */
module_unneed( p_dec, p_dec->p_module );
vlc_restorecancel( canc );
return NULL; return NULL;
} }
...@@ -1770,7 +1781,6 @@ static int DecoderProcess( decoder_t *p_dec, block_t *p_block ) ...@@ -1770,7 +1781,6 @@ static int DecoderProcess( decoder_t *p_dec, block_t *p_block )
return VLC_SUCCESS; return VLC_SUCCESS;
} }
int canc = vlc_savecancel ();
#ifdef ENABLE_SOUT #ifdef ENABLE_SOUT
if( p_dec->i_object_type == VLC_OBJECT_PACKETIZER ) if( p_dec->i_object_type == VLC_OBJECT_PACKETIZER )
{ {
...@@ -1822,7 +1832,6 @@ static int DecoderProcess( decoder_t *p_dec, block_t *p_block ) ...@@ -1822,7 +1832,6 @@ static int DecoderProcess( decoder_t *p_dec, block_t *p_block )
DecoderSignalFlushed( p_dec ); DecoderSignalFlushed( p_dec );
} }
vlc_restorecancel(canc);
return p_dec->b_error ? VLC_EGENERIC : VLC_SUCCESS; return p_dec->b_error ? VLC_EGENERIC : VLC_SUCCESS;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment