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=:,[
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)
......
......@@ -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
{
......
......@@ -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
......
......@@ -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();
......
......@@ -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
......
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