Default to using pthread instead of exploding.
authorRémi Denis-Courmont <rem@videolan.org>
Sun, 27 Jan 2008 15:56:24 +0000 (15:56 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Sun, 27 Jan 2008 15:56:24 +0000 (15:56 +0000)
This fixes the single largest source of problems when including vlc/*.h out of the box.

configure.ac
include/vlc_threads.h
include/vlc_threads_funcs.h
src/libvlc-module.c
src/misc/threads.c

index 0d5eb07..71c5d33 100644 (file)
@@ -764,15 +764,9 @@ AC_CHECK_FUNCS(nanosleep,have_nanosleep=:,[
 if ${have_nanosleep}; then
   AC_DEFINE(HAVE_NANOSLEEP, 1, [Define if nanosleep is available.])
 fi
+fi # end "${SYS}" != "mingw32" -a "${SYS}" != "mingwce" 
 
 dnl Check for misc headers
-AC_MSG_CHECKING(for pthread_cond_t in pthread.h)
-AC_EGREP_HEADER(pthread_cond_t,pthread.h,[
-  AC_MSG_RESULT(yes)
-  AC_DEFINE(PTHREAD_COND_T_IN_PTHREAD_H, 1,
-            Define if <pthread.h> defines pthread_cond_t.)],[
-  AC_MSG_RESULT(no)])
-
 AC_MSG_CHECKING(for strncasecmp in strings.h)
 AC_EGREP_HEADER(strncasecmp,strings.h,[
   AC_MSG_RESULT(yes)
index 43c3cd9..d10ca4d 100644 (file)
@@ -44,7 +44,7 @@
 #   include <kernel/scheduler.h>
 #   include <byteorder.h>
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )  /* pthreads (like Linux & BSD) */
+#else                                         /* pthreads (like Linux & BSD) */
 #   define LIBVLC_USE_PTHREAD 1
 #   define _APPLE_C_SOURCE    1 /* Proper pthread semantics on OSX */
 
@@ -56,9 +56,6 @@
 #      include <time.h>
 #   endif
 
-#else
-#   error no threads available on your system !
-
 #endif
 
 /*****************************************************************************
@@ -82,7 +79,7 @@
 #   define VLC_THREAD_PRIORITY_OUTPUT 15
 #   define VLC_THREAD_PRIORITY_HIGHEST 15
 
-#elif defined(PTHREAD_COND_T_IN_PTHREAD_H)
+#elif defined(LIBVLC_USE_PTHREAD)
 #   define VLC_THREAD_PRIORITY_LOW 0
 #   define VLC_THREAD_PRIORITY_INPUT 20
 #   define VLC_THREAD_PRIORITY_AUDIO 10
@@ -189,7 +186,7 @@ typedef struct
 } vlc_threadvar_t;
 
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#else
 typedef pthread_t       vlc_thread_t;
 typedef struct
 {
index 696b39f..fd7148d 100644 (file)
@@ -84,7 +84,7 @@ VLC_EXPORT( void, __vlc_thread_join,   ( vlc_object_t *, const char *, int ) );
 #define vlc_mutex_lock( P_MUTEX )                                           \
     __vlc_mutex_lock( __FILE__, __LINE__, P_MUTEX )
 
-#if defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#if defined(LIBVLC_USE_PTHREAD)
 static inline unsigned long int CAST_PTHREAD_TO_INT (pthread_t th)
 {
      union { pthread_t th; unsigned long int i; } v = { };
@@ -129,7 +129,7 @@ static inline int __vlc_mutex_lock( const char * psz_file, int i_line,
         i_result = acquire_sem( p_mutex->lock );
     }
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
 #   define vlc_assert_locked( m ) \
            assert (pthread_mutex_lock (&((m)->mutex)) == EDEADLK)
 
@@ -199,7 +199,7 @@ static inline int __vlc_mutex_unlock( const char * psz_file, int i_line,
         return B_OK;
     }
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
     i_result = pthread_mutex_unlock( &p_mutex->mutex );
     if ( i_result )
     {
@@ -332,7 +332,7 @@ static inline int __vlc_cond_signal( const char * psz_file, int i_line,
         i_result = 0;
     }
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
     i_result = pthread_cond_signal( &p_condvar->cond );
     if ( i_result )
     {
@@ -478,7 +478,7 @@ static inline int __vlc_cond_wait( const char * psz_file, int i_line,
     vlc_mutex_lock( p_mutex );
     i_result = 0;
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
 
 #   ifdef DEBUG
     /* In debug mode, timeout */
@@ -654,7 +654,7 @@ static inline int __vlc_cond_timedwait( const char * psz_file, int i_line,
 
 #elif defined( HAVE_KERNEL_SCHEDULER_H )
 #   error Unimplemented
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
     lldiv_t d = lldiv( deadline, 1000000 );
     struct timespec ts = { d.quot, d.rem * 1000 };
 
@@ -706,7 +706,7 @@ static inline int vlc_threadvar_set( vlc_threadvar_t * p_tls, void *p_value )
 #elif defined( UNDER_CE ) || defined( WIN32 )
     i_ret = ( TlsSetValue( p_tls->handle, p_value ) != 0 );
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
     i_ret = pthread_setspecific( p_tls->handle, p_value );
 
 #endif
@@ -726,7 +726,7 @@ static inline void* vlc_threadvar_get( vlc_threadvar_t * p_tls )
 #elif defined( UNDER_CE ) || defined( WIN32 )
     p_ret = TlsGetValue( p_tls->handle );
 
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
     p_ret = pthread_getspecific( p_tls->handle );
 
 #endif
index 40f45ea..a372d4a 100644 (file)
@@ -1813,13 +1813,13 @@ vlc_module_begin();
         change_unsafe();
         change_need_restart();
 
-#if !defined(__APPLE__) && !defined(SYS_BEOS) && defined(PTHREAD_COND_T_IN_PTHREAD_H)
+#if !defined(__APPLE__) && !defined(SYS_BEOS) && defined(LIBVLC_USE_PTHREAD)
     add_bool( "rt-priority", VLC_FALSE, NULL, RT_PRIORITY_TEXT,
               RT_PRIORITY_LONGTEXT, VLC_TRUE );
         change_need_restart();
 #endif
 
-#if !defined(SYS_BEOS) && defined(PTHREAD_COND_T_IN_PTHREAD_H)
+#if !defined(SYS_BEOS) && defined(LIBVLC_USE_PTHREAD)
     add_integer( "rt-offset", 0, NULL, RT_OFFSET_TEXT,
                  RT_OFFSET_LONGTEXT, VLC_TRUE );
         change_need_restart();
index 794e1c0..8d52580 100644 (file)
@@ -72,7 +72,7 @@ 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;
 #endif
 
@@ -115,7 +115,7 @@ 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 );
 #endif
 
@@ -146,7 +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( LIBVLC_USE_PTHREAD )
 #endif
 
         p_root = vlc_object_create( p_libvlc_global, VLC_OBJECT_GLOBAL );
@@ -179,7 +179,7 @@ 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 );
 #endif
 
@@ -202,7 +202,7 @@ 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 );
 #endif
 
@@ -219,7 +219,7 @@ 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 );
 #endif
     return VLC_SUCCESS;
@@ -280,7 +280,7 @@ 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 )
+#elif defined( LIBVLC_USE_PTHREAD )
 # if defined(DEBUG)
     {
         /* Create error-checking mutex to detect problems more easily. */
@@ -313,7 +313,7 @@ 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;
 
@@ -371,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 )
     {
@@ -463,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;
 
@@ -513,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 )
     {
@@ -549,7 +549,7 @@ 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 );
 #endif
     return i_ret;
@@ -610,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__
@@ -705,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
@@ -837,7 +837,7 @@ 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 );
 
 #endif