[vlc-devel] commit: Simplify threads init ( Rémi Denis-Courmont )
git version control
git at videolan.org
Sat May 3 11:49:58 CEST 2008
vlc | branch: master | Rémi Denis-Courmont <rem at videolan.org> | Sat May 3 11:33:11 2008 +0300| [50e969ef00854bf902b682941cd736e94338f952]
Simplify threads init
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=50e969ef00854bf902b682941cd736e94338f952
---
src/libvlc-common.c | 5 ++---
src/misc/threads.c | 46 +++++++++-------------------------------------
2 files changed, 11 insertions(+), 40 deletions(-)
diff --git a/src/libvlc-common.c b/src/libvlc-common.c
index 7831340..638bc33 100644
--- a/src/libvlc-common.c
+++ b/src/libvlc-common.c
@@ -151,14 +151,13 @@ libvlc_int_t * vlc_current_object( int i_object )
*/
libvlc_int_t * libvlc_InternalCreate( void )
{
- int i_ret;
libvlc_int_t * p_libvlc = NULL;
char *psz_env = NULL;
/* vlc_threads_init *must* be the first internal call! No other call is
* allowed before the thread system has been initialized. */
- i_ret = vlc_threads_init( p_libvlc_global );
- if( i_ret < 0 ) return NULL;
+ if( vlc_threads_init( p_libvlc_global ) )
+ return NULL;
/* Now that the thread system is initialized, we don't have much, but
* at least we have variables */
diff --git a/src/misc/threads.c b/src/misc/threads.c
index 534c806..5bf2fa8 100644
--- a/src/misc/threads.c
+++ b/src/misc/threads.c
@@ -45,7 +45,6 @@
* Global mutex for lazy initialization of the threads system
*****************************************************************************/
static volatile unsigned i_initializations = 0;
-static volatile int i_status = VLC_THREADS_UNINITIALIZED;
static vlc_object_t *p_root;
#if defined( UNDER_CE )
@@ -130,53 +129,32 @@ int __vlc_threads_init( vlc_object_t *p_this )
pthread_mutex_lock( &once_mutex );
#endif
- if( i_status == VLC_THREADS_UNINITIALIZED )
+ if( i_initializations == 0 )
{
- i_status = VLC_THREADS_PENDING;
-
/* We should be safe now. Do all the initialization stuff we want. */
p_libvlc_global->b_ready = false;
p_root = vlc_custom_create( VLC_OBJECT(p_libvlc_global), 0,
VLC_OBJECT_GLOBAL, "global" );
if( p_root == NULL )
- i_ret = VLC_ENOMEM;
-
- if( i_ret )
- {
- i_status = VLC_THREADS_ERROR;
- }
- else
{
- i_initializations++;
- i_status = VLC_THREADS_READY;
+ i_ret = VLC_ENOMEM;
+ goto out;
}
-
vlc_threadvar_create( p_root, &msg_context_global_key );
}
- else
- {
- /* Just increment the initialization count */
- i_initializations++;
- }
+ i_initializations++;
- /* If we have lazy mutex initialization support, unlock the mutex;
- * otherwize, do a naive wait loop. */
+out:
+ /* If we have lazy mutex initialization support, unlock the mutex.
+ * Otherwize, we are screwed. */
#if defined( UNDER_CE )
- while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP );
#elif defined( WIN32 )
- while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP );
#elif defined( HAVE_KERNEL_SCHEDULER_H )
- while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP );
#elif defined( LIBVLC_USE_PTHREAD )
pthread_mutex_unlock( &once_mutex );
#endif
- if( i_status != VLC_THREADS_READY )
- {
- return VLC_ETHREAD;
- }
-
return i_ret;
}
@@ -195,15 +173,9 @@ int __vlc_threads_end( vlc_object_t *p_this )
pthread_mutex_lock( &once_mutex );
#endif
- if( i_initializations == 0 )
- return VLC_EGENERIC;
-
- i_initializations--;
- if( i_initializations == 0 )
- {
- i_status = VLC_THREADS_UNINITIALIZED;
+ assert( i_initializations > 0 );
+ if( --i_initializations == 0 )
vlc_object_release( p_root );
- }
#if defined( UNDER_CE )
#elif defined( WIN32 )
More information about the vlc-devel
mailing list