Commit 7fd77d96 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Default to using pthread instead of exploding.

This fixes the single largest source of problems when including vlc/*.h out of the box.
parent 37bc09bf
...@@ -764,15 +764,9 @@ AC_CHECK_FUNCS(nanosleep,have_nanosleep=:,[ ...@@ -764,15 +764,9 @@ AC_CHECK_FUNCS(nanosleep,have_nanosleep=:,[
if ${have_nanosleep}; then if ${have_nanosleep}; then
AC_DEFINE(HAVE_NANOSLEEP, 1, [Define if nanosleep is available.]) AC_DEFINE(HAVE_NANOSLEEP, 1, [Define if nanosleep is available.])
fi fi
fi # end "${SYS}" != "mingw32" -a "${SYS}" != "mingwce"
dnl Check for misc headers 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_MSG_CHECKING(for strncasecmp in strings.h)
AC_EGREP_HEADER(strncasecmp,strings.h,[ AC_EGREP_HEADER(strncasecmp,strings.h,[
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
# include <kernel/scheduler.h> # include <kernel/scheduler.h>
# include <byteorder.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 LIBVLC_USE_PTHREAD 1
# define _APPLE_C_SOURCE 1 /* Proper pthread semantics on OSX */ # define _APPLE_C_SOURCE 1 /* Proper pthread semantics on OSX */
...@@ -56,9 +56,6 @@ ...@@ -56,9 +56,6 @@
# include <time.h> # include <time.h>
# endif # endif
#else
# error no threads available on your system !
#endif #endif
/***************************************************************************** /*****************************************************************************
...@@ -82,7 +79,7 @@ ...@@ -82,7 +79,7 @@
# define VLC_THREAD_PRIORITY_OUTPUT 15 # define VLC_THREAD_PRIORITY_OUTPUT 15
# define VLC_THREAD_PRIORITY_HIGHEST 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_LOW 0
# define VLC_THREAD_PRIORITY_INPUT 20 # define VLC_THREAD_PRIORITY_INPUT 20
# define VLC_THREAD_PRIORITY_AUDIO 10 # define VLC_THREAD_PRIORITY_AUDIO 10
...@@ -189,7 +186,7 @@ typedef struct ...@@ -189,7 +186,7 @@ typedef struct
} vlc_threadvar_t; } vlc_threadvar_t;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #else
typedef pthread_t vlc_thread_t; typedef pthread_t vlc_thread_t;
typedef struct typedef struct
{ {
......
...@@ -84,7 +84,7 @@ VLC_EXPORT( void, __vlc_thread_join, ( vlc_object_t *, const char *, int ) ); ...@@ -84,7 +84,7 @@ VLC_EXPORT( void, __vlc_thread_join, ( vlc_object_t *, const char *, int ) );
#define vlc_mutex_lock( P_MUTEX ) \ #define vlc_mutex_lock( P_MUTEX ) \
__vlc_mutex_lock( __FILE__, __LINE__, 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) static inline unsigned long int CAST_PTHREAD_TO_INT (pthread_t th)
{ {
union { pthread_t th; unsigned long int i; } v = { }; 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, ...@@ -129,7 +129,7 @@ static inline int __vlc_mutex_lock( const char * psz_file, int i_line,
i_result = acquire_sem( p_mutex->lock ); 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 ) \ # define vlc_assert_locked( m ) \
assert (pthread_mutex_lock (&((m)->mutex)) == EDEADLK) assert (pthread_mutex_lock (&((m)->mutex)) == EDEADLK)
...@@ -199,7 +199,7 @@ static inline int __vlc_mutex_unlock( const char * psz_file, int i_line, ...@@ -199,7 +199,7 @@ static inline int __vlc_mutex_unlock( const char * psz_file, int i_line,
return B_OK; return B_OK;
} }
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined(LIBVLC_USE_PTHREAD)
i_result = pthread_mutex_unlock( &p_mutex->mutex ); i_result = pthread_mutex_unlock( &p_mutex->mutex );
if ( i_result ) if ( i_result )
{ {
...@@ -332,7 +332,7 @@ static inline int __vlc_cond_signal( const char * psz_file, int i_line, ...@@ -332,7 +332,7 @@ static inline int __vlc_cond_signal( const char * psz_file, int i_line,
i_result = 0; i_result = 0;
} }
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined(LIBVLC_USE_PTHREAD)
i_result = pthread_cond_signal( &p_condvar->cond ); i_result = pthread_cond_signal( &p_condvar->cond );
if ( i_result ) if ( i_result )
{ {
...@@ -478,7 +478,7 @@ static inline int __vlc_cond_wait( const char * psz_file, int i_line, ...@@ -478,7 +478,7 @@ static inline int __vlc_cond_wait( const char * psz_file, int i_line,
vlc_mutex_lock( p_mutex ); vlc_mutex_lock( p_mutex );
i_result = 0; i_result = 0;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined(LIBVLC_USE_PTHREAD)
# ifdef DEBUG # ifdef DEBUG
/* In debug mode, timeout */ /* In debug mode, timeout */
...@@ -654,7 +654,7 @@ static inline int __vlc_cond_timedwait( const char * psz_file, int i_line, ...@@ -654,7 +654,7 @@ static inline int __vlc_cond_timedwait( const char * psz_file, int i_line,
#elif defined( HAVE_KERNEL_SCHEDULER_H ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
# error Unimplemented # error Unimplemented
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined(LIBVLC_USE_PTHREAD)
lldiv_t d = lldiv( deadline, 1000000 ); lldiv_t d = lldiv( deadline, 1000000 );
struct timespec ts = { d.quot, d.rem * 1000 }; 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 ) ...@@ -706,7 +706,7 @@ static inline int vlc_threadvar_set( vlc_threadvar_t * p_tls, void *p_value )
#elif defined( UNDER_CE ) || defined( WIN32 ) #elif defined( UNDER_CE ) || defined( WIN32 )
i_ret = ( TlsSetValue( p_tls->handle, p_value ) != 0 ); 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 ); i_ret = pthread_setspecific( p_tls->handle, p_value );
#endif #endif
...@@ -726,7 +726,7 @@ static inline void* vlc_threadvar_get( vlc_threadvar_t * p_tls ) ...@@ -726,7 +726,7 @@ static inline void* vlc_threadvar_get( vlc_threadvar_t * p_tls )
#elif defined( UNDER_CE ) || defined( WIN32 ) #elif defined( UNDER_CE ) || defined( WIN32 )
p_ret = TlsGetValue( p_tls->handle ); 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 ); p_ret = pthread_getspecific( p_tls->handle );
#endif #endif
......
...@@ -1813,13 +1813,13 @@ vlc_module_begin(); ...@@ -1813,13 +1813,13 @@ vlc_module_begin();
change_unsafe(); change_unsafe();
change_need_restart(); 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, add_bool( "rt-priority", VLC_FALSE, NULL, RT_PRIORITY_TEXT,
RT_PRIORITY_LONGTEXT, VLC_TRUE ); RT_PRIORITY_LONGTEXT, VLC_TRUE );
change_need_restart(); change_need_restart();
#endif #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, add_integer( "rt-offset", 0, NULL, RT_OFFSET_TEXT,
RT_OFFSET_LONGTEXT, VLC_TRUE ); RT_OFFSET_LONGTEXT, VLC_TRUE );
change_need_restart(); change_need_restart();
......
...@@ -72,7 +72,7 @@ static vlc_bool_t b_fast_mutex = VLC_FALSE; ...@@ -72,7 +72,7 @@ static vlc_bool_t b_fast_mutex = VLC_FALSE;
static int i_win9x_cv = 1; static int i_win9x_cv = 1;
#elif defined( HAVE_KERNEL_SCHEDULER_H ) #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; static pthread_mutex_t once_mutex = PTHREAD_MUTEX_INITIALIZER;
#endif #endif
...@@ -115,7 +115,7 @@ int __vlc_threads_init( vlc_object_t *p_this ) ...@@ -115,7 +115,7 @@ int __vlc_threads_init( vlc_object_t *p_this )
i_win9x_cv = 1; i_win9x_cv = 1;
} }
#elif defined( HAVE_KERNEL_SCHEDULER_H ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
pthread_mutex_lock( &once_mutex ); pthread_mutex_lock( &once_mutex );
#endif #endif
...@@ -146,7 +146,7 @@ int __vlc_threads_init( vlc_object_t *p_this ) ...@@ -146,7 +146,7 @@ int __vlc_threads_init( vlc_object_t *p_this )
} }
#elif defined( HAVE_KERNEL_SCHEDULER_H ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
#endif #endif
p_root = vlc_object_create( p_libvlc_global, VLC_OBJECT_GLOBAL ); p_root = vlc_object_create( p_libvlc_global, VLC_OBJECT_GLOBAL );
...@@ -179,7 +179,7 @@ int __vlc_threads_init( vlc_object_t *p_this ) ...@@ -179,7 +179,7 @@ int __vlc_threads_init( vlc_object_t *p_this )
while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP ); while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP );
#elif defined( HAVE_KERNEL_SCHEDULER_H ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP ); 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 ); pthread_mutex_unlock( &once_mutex );
#endif #endif
...@@ -202,7 +202,7 @@ int __vlc_threads_end( vlc_object_t *p_this ) ...@@ -202,7 +202,7 @@ int __vlc_threads_end( vlc_object_t *p_this )
#if defined( UNDER_CE ) #if defined( UNDER_CE )
#elif defined( WIN32 ) #elif defined( WIN32 )
#elif defined( HAVE_KERNEL_SCHEDULER_H ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
pthread_mutex_lock( &once_mutex ); pthread_mutex_lock( &once_mutex );
#endif #endif
...@@ -219,7 +219,7 @@ int __vlc_threads_end( vlc_object_t *p_this ) ...@@ -219,7 +219,7 @@ int __vlc_threads_end( vlc_object_t *p_this )
#if defined( UNDER_CE ) #if defined( UNDER_CE )
#elif defined( WIN32 ) #elif defined( WIN32 )
#elif defined( HAVE_KERNEL_SCHEDULER_H ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
pthread_mutex_unlock( &once_mutex ); pthread_mutex_unlock( &once_mutex );
#endif #endif
return VLC_SUCCESS; return VLC_SUCCESS;
...@@ -280,7 +280,7 @@ int __vlc_mutex_init( vlc_object_t *p_this, vlc_mutex_t *p_mutex ) ...@@ -280,7 +280,7 @@ int __vlc_mutex_init( vlc_object_t *p_this, vlc_mutex_t *p_mutex )
p_mutex->init = 9999; p_mutex->init = 9999;
return B_OK; return B_OK;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
# if defined(DEBUG) # if defined(DEBUG)
{ {
/* Create error-checking mutex to detect problems more easily. */ /* 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 ) ...@@ -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 */ /* Create mutex returns a recursive mutex */
p_mutex->mutex = CreateMutex( 0, FALSE, 0 ); p_mutex->mutex = CreateMutex( 0, FALSE, 0 );
return ( p_mutex->mutex != NULL ? 0 : 1 ); return ( p_mutex->mutex != NULL ? 0 : 1 );
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
pthread_mutexattr_t attr; pthread_mutexattr_t attr;
int i_result; int i_result;
...@@ -371,7 +371,7 @@ int __vlc_mutex_destroy( const char * psz_file, int i_line, vlc_mutex_t *p_mutex ...@@ -371,7 +371,7 @@ int __vlc_mutex_destroy( const char * psz_file, int i_line, vlc_mutex_t *p_mutex
p_mutex->init = 0; p_mutex->init = 0;
return B_OK; return B_OK;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
i_result = pthread_mutex_destroy( &p_mutex->mutex ); i_result = pthread_mutex_destroy( &p_mutex->mutex );
if( i_result ) if( i_result )
{ {
...@@ -463,7 +463,7 @@ int __vlc_cond_init( vlc_object_t *p_this, vlc_cond_t *p_condvar ) ...@@ -463,7 +463,7 @@ int __vlc_cond_init( vlc_object_t *p_this, vlc_cond_t *p_condvar )
p_condvar->init = 9999; p_condvar->init = 9999;
return 0; return 0;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
pthread_condattr_t attr; pthread_condattr_t attr;
int ret; int ret;
...@@ -513,7 +513,7 @@ int __vlc_cond_destroy( const char * psz_file, int i_line, vlc_cond_t *p_condvar ...@@ -513,7 +513,7 @@ int __vlc_cond_destroy( const char * psz_file, int i_line, vlc_cond_t *p_condvar
p_condvar->init = 0; p_condvar->init = 0;
return 0; return 0;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
i_result = pthread_cond_destroy( &p_condvar->cond ); i_result = pthread_cond_destroy( &p_condvar->cond );
if( i_result ) if( i_result )
{ {
...@@ -549,7 +549,7 @@ int __vlc_threadvar_create( vlc_object_t *p_this, vlc_threadvar_t *p_tls ) ...@@ -549,7 +549,7 @@ int __vlc_threadvar_create( vlc_object_t *p_this, vlc_threadvar_t *p_tls )
p_tls->handle = TlsAlloc(); p_tls->handle = TlsAlloc();
i_ret = !( p_tls->handle == 0xFFFFFFFF ); 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 ); i_ret = pthread_key_create( &p_tls->handle, NULL );
#endif #endif
return i_ret; return i_ret;
...@@ -610,7 +610,7 @@ int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line ...@@ -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_priority, p_data );
i_ret = resume_thread( p_priv->thread_id ); 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 ); i_ret = pthread_create( &p_priv->thread_id, NULL, func, p_data );
#ifndef __APPLE__ #ifndef __APPLE__
...@@ -705,7 +705,7 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file, ...@@ -705,7 +705,7 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
return 1; return 1;
} }
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( LIBVLC_USE_PTHREAD )
# ifndef __APPLE__ # ifndef __APPLE__
if( config_GetInt( p_this, "rt-priority" ) > 0 ) if( config_GetInt( p_this, "rt-priority" ) > 0 )
# endif # endif
...@@ -837,7 +837,7 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line ...@@ -837,7 +837,7 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line
int32_t exit_value; int32_t exit_value;
i_ret = (B_OK == wait_for_thread( p_priv->thread_id, &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 ); i_ret = pthread_join( p_priv->thread_id, NULL );
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment