]> git.sesse.net Git - vlc/blobdiff - src/misc/threads.c
Win32 threads: Set priority on success rather than failure.
[vlc] / src / misc / threads.c
index 59a9c64f8934fa3c68df48966037bec80bbd5819..1c239a40bad62c7c9e5c3f5bde9ad37bc7751d4d 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <vlc/vlc.h>
 
 #include "libvlc.h"
@@ -68,9 +72,8 @@ static vlc_bool_t          b_fast_mutex = VLC_FALSE;
 static int i_win9x_cv = 1;
 
 #elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
 static pthread_mutex_t once_mutex = PTHREAD_MUTEX_INITIALIZER;
-#elif defined( HAVE_CTHREADS_H )
 #endif
 
 vlc_threadvar_t msg_context_global_key;
@@ -112,9 +115,8 @@ int __vlc_threads_init( vlc_object_t *p_this )
         i_win9x_cv = 1;
     }
 #elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     pthread_mutex_lock( &once_mutex );
-#elif defined( HAVE_CTHREADS_H )
 #endif
 
     if( i_status == VLC_THREADS_UNINITIALIZED )
@@ -144,8 +146,7 @@ int __vlc_threads_init( vlc_object_t *p_this )
         }
 
 #elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
-#elif defined( HAVE_CTHREADS_H )
+#elif defined( LIBVLC_USE_PTHREAD )
 #endif
 
         p_root = vlc_object_create( p_libvlc_global, VLC_OBJECT_GLOBAL );
@@ -178,10 +179,8 @@ int __vlc_threads_init( vlc_object_t *p_this )
     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( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     pthread_mutex_unlock( &once_mutex );
-#elif defined( HAVE_CTHREADS_H )
-    while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP );
 #endif
 
     if( i_status != VLC_THREADS_READY )
@@ -203,9 +202,8 @@ int __vlc_threads_end( vlc_object_t *p_this )
 #if defined( UNDER_CE )
 #elif defined( WIN32 )
 #elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     pthread_mutex_lock( &once_mutex );
-#elif defined( HAVE_CTHREADS_H )
 #endif
 
     if( i_initializations == 0 )
@@ -221,19 +219,22 @@ int __vlc_threads_end( vlc_object_t *p_this )
 #if defined( UNDER_CE )
 #elif defined( WIN32 )
 #elif defined( HAVE_KERNEL_SCHEDULER_H )
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     pthread_mutex_unlock( &once_mutex );
-#elif defined( HAVE_CTHREADS_H )
 #endif
     return VLC_SUCCESS;
 }
 
+#ifdef __linux__
+/* This is not prototyped under Linux, though it exists. */
+int pthread_mutexattr_setkind_np( pthread_mutexattr_t *attr, int kind );
+#endif
+
 /*****************************************************************************
  * vlc_mutex_init: initialize a mutex
  *****************************************************************************/
 int __vlc_mutex_init( vlc_object_t *p_this, vlc_mutex_t *p_mutex )
 {
-    assert( p_this );
     p_mutex->p_this = p_this;
 
 #if defined( UNDER_CE )
@@ -279,8 +280,8 @@ int __vlc_mutex_init( vlc_object_t *p_this, vlc_mutex_t *p_mutex )
     p_mutex->init = 9999;
     return B_OK;
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
-# if defined(DEBUG)
+#elif defined( LIBVLC_USE_PTHREAD )
+# ifndef NDEBUG
     {
         /* Create error-checking mutex to detect problems more easily. */
         pthread_mutexattr_t attr;
@@ -297,13 +298,9 @@ int __vlc_mutex_init( vlc_object_t *p_this, vlc_mutex_t *p_mutex )
         pthread_mutexattr_destroy( &attr );
         return( i_result );
     }
-# endif
+# endif /* NDEBUG */
     return pthread_mutex_init( &p_mutex->mutex, NULL );
 
-#elif defined( HAVE_CTHREADS_H )
-    mutex_init( p_mutex );
-    return 0;
-
 #endif
 }
 
@@ -316,12 +313,12 @@ int __vlc_mutex_init_recursive( vlc_object_t *p_this, vlc_mutex_t *p_mutex )
     /* Create mutex returns a recursive mutex */
     p_mutex->mutex = CreateMutex( 0, FALSE, 0 );
     return ( p_mutex->mutex != NULL ? 0 : 1 );
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     pthread_mutexattr_t attr;
     int                 i_result;
 
     pthread_mutexattr_init( &attr );
-# if defined(DEBUG)
+# ifndef NDEBUG
     /* Create error-checking mutex to detect problems more easily. */
 #   if defined(SYS_LINUX)
     pthread_mutexattr_setkind_np( &attr, PTHREAD_MUTEX_ERRORCHECK_NP );
@@ -374,7 +371,7 @@ int __vlc_mutex_destroy( const char * psz_file, int i_line, vlc_mutex_t *p_mutex
     p_mutex->init = 0;
     return B_OK;
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     i_result = pthread_mutex_destroy( &p_mutex->mutex );
     if( i_result )
     {
@@ -382,9 +379,6 @@ int __vlc_mutex_destroy( const char * psz_file, int i_line, vlc_mutex_t *p_mutex
         errno = i_result;
     }
 
-#elif defined( HAVE_CTHREADS_H )
-    return 0;
-
 #endif
 
     if( i_result )
@@ -469,7 +463,7 @@ int __vlc_cond_init( vlc_object_t *p_this, vlc_cond_t *p_condvar )
     p_condvar->init = 9999;
     return 0;
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     pthread_condattr_t attr;
     int ret;
 
@@ -490,15 +484,6 @@ int __vlc_cond_init( vlc_object_t *p_this, vlc_cond_t *p_condvar )
     pthread_condattr_destroy (&attr);
     return ret;
 
-#elif defined( HAVE_CTHREADS_H )
-    /* condition_init() */
-    spin_lock_init( &p_condvar->lock );
-    cthread_queue_init( &p_condvar->queue );
-    p_condvar->name = 0;
-    p_condvar->implications = 0;
-
-    return 0;
-
 #endif
 }
 
@@ -528,7 +513,7 @@ int __vlc_cond_destroy( const char * psz_file, int i_line, vlc_cond_t *p_condvar
     p_condvar->init = 0;
     return 0;
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     i_result = pthread_cond_destroy( &p_condvar->cond );
     if( i_result )
     {
@@ -536,9 +521,6 @@ int __vlc_cond_destroy( const char * psz_file, int i_line, vlc_cond_t *p_condvar
         errno = i_result;
     }
 
-#elif defined( HAVE_CTHREADS_H )
-    return 0;
-
 #endif
 
     if( i_result )
@@ -567,10 +549,8 @@ int __vlc_threadvar_create( vlc_object_t *p_this, vlc_threadvar_t *p_tls )
     p_tls->handle = TlsAlloc();
     i_ret = !( p_tls->handle == 0xFFFFFFFF );
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     i_ret =  pthread_key_create( &p_tls->handle, NULL );
-#elif defined( HAVE_CTHREADS_H )
-    i_ret = cthread_keycreate( &p_tls-handle );
 #endif
     return i_ret;
 }
@@ -611,12 +591,12 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line
 #endif
         p_priv->thread_id.id = (DWORD)threadId;
         p_priv->thread_id.hThread = (HANDLE)hThread;
-    ResumeThread((HANDLE)hThread);
+        ResumeThread((HANDLE)hThread);
     }
 
     i_ret = ( p_priv->thread_id.hThread ? 0 : 1 );
 
-    if( i_ret && i_priority )
+    if( !i_ret && i_priority )
     {
         if( !SetThreadPriority(p_priv->thread_id.hThread, i_priority) )
         {
@@ -630,7 +610,7 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line
                                       i_priority, p_data );
     i_ret = resume_thread( p_priv->thread_id );
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     i_ret = pthread_create( &p_priv->thread_id, NULL, func, p_data );
 
 #ifndef __APPLE__
@@ -671,10 +651,6 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line
     }
 #endif
 
-#elif defined( HAVE_CTHREADS_H )
-    p_priv->thread_id = cthread_fork( (cthread_fn_t)func, (any_t)p_data );
-    i_ret = 0;
-
 #endif
 
     if( i_ret == 0 )
@@ -729,7 +705,7 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
         return 1;
     }
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
 # ifndef __APPLE__
     if( config_GetInt( p_this, "rt-priority" ) > 0 )
 # endif
@@ -861,13 +837,9 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line
     int32_t exit_value;
     i_ret = (B_OK == wait_for_thread( p_priv->thread_id, &exit_value ));
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined( LIBVLC_USE_PTHREAD )
     i_ret = pthread_join( p_priv->thread_id, NULL );
 
-#elif defined( HAVE_CTHREADS_H )
-    cthread_join( p_priv->thread_id );
-    i_ret = 1;
-
 #endif
 
     if( i_ret )