[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