[vlc-devel] commit: Another small decoder thread simplification ( Rémi Denis-Courmont )
git version control
git at videolan.org
Thu Oct 23 21:58:11 CEST 2008
vlc | branch: master | Rémi Denis-Courmont <rdenis at simphalempin.com> | Thu Oct 23 22:58:01 2008 +0300| [1c963efdd3ab1375a43593dc5c1b9bc30752b74d] | committer: Rémi Denis-Courmont
Another small decoder thread simplification
Conflicts:
src/input/decoder.c
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1c963efdd3ab1375a43593dc5c1b9bc30752b74d
---
src/input/decoder.c | 21 ++++++---------------
1 files changed, 6 insertions(+), 15 deletions(-)
diff --git a/src/input/decoder.c b/src/input/decoder.c
index 5b5fbbe..b6054cb 100644
--- a/src/input/decoder.c
+++ b/src/input/decoder.c
@@ -310,13 +310,8 @@ void input_DecoderDelete( decoder_t *p_dec )
}
vlc_mutex_unlock( &p_owner->lock );
- /* Make sure the thread leaves the function */
- block_FifoWake( p_owner->p_fifo );
-
vlc_thread_join( p_dec );
-
- /* Don't module_unneed() here because of the dll loader that wants
- * close() in the same thread than decode() */
+ module_unneed( p_dec, p_dec->p_module );
/* */
if( p_dec->p_owner->cc.b_supported )
@@ -782,13 +777,12 @@ static void *DecoderThread( vlc_object_t *p_this )
decoder_t *p_dec = (decoder_t *)p_this;
decoder_owner_sys_t *p_owner = p_dec->p_owner;
- int canc = vlc_savecancel();
-
/* The decoder's main loop */
- while( vlc_object_alive( p_dec ) )
+ for (;;)
{
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 );
if( p_block )
@@ -805,11 +799,6 @@ static void *DecoderThread( vlc_object_t *p_this )
}
DecoderSignalBuffering( p_dec, true );
-
- /* We do it here because of the dll loader that wants close() in the
- * same thread than decode() */
- module_unneed( p_dec, p_dec->p_module );
- vlc_restorecancel( canc );
return NULL;
}
@@ -1794,6 +1783,7 @@ static int DecoderProcess( decoder_t *p_dec, block_t *p_block )
return VLC_SUCCESS;
}
+ int canc = vlc_savecancel ();
#ifdef ENABLE_SOUT
if( p_dec->i_object_type == VLC_OBJECT_PACKETIZER )
{
@@ -1845,6 +1835,7 @@ static int DecoderProcess( decoder_t *p_dec, block_t *p_block )
DecoderSignalFlushed( p_dec );
}
+ vlc_restorecancel(canc);
return p_dec->b_error ? VLC_EGENERIC : VLC_SUCCESS;
}
More information about the vlc-devel
mailing list