From 7fd77d963a10bba8397593a48a23b970665a9d91 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 27 Jan 2008 15:56:24 +0000 Subject: [PATCH] Default to using pthread instead of exploding. This fixes the single largest source of problems when including vlc/*.h out of the box. --- configure.ac | 8 +------- include/vlc_threads.h | 9 +++------ include/vlc_threads_funcs.h | 16 ++++++++-------- src/libvlc-module.c | 4 ++-- src/misc/threads.c | 30 +++++++++++++++--------------- 5 files changed, 29 insertions(+), 38 deletions(-) diff --git a/configure.ac b/configure.ac index 0d5eb07a1d..71c5d33f72 100644 --- a/configure.ac +++ b/configure.ac @@ -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 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) diff --git a/include/vlc_threads.h b/include/vlc_threads.h index 43c3cd9fea..d10ca4d24a 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -44,7 +44,7 @@ # include # include -#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 # 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 { diff --git a/include/vlc_threads_funcs.h b/include/vlc_threads_funcs.h index 696b39f758..fd7148d6a1 100644 --- a/include/vlc_threads_funcs.h +++ b/include/vlc_threads_funcs.h @@ -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 diff --git a/src/libvlc-module.c b/src/libvlc-module.c index 40f45ea49a..a372d4a210 100644 --- a/src/libvlc-module.c +++ b/src/libvlc-module.c @@ -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(); diff --git a/src/misc/threads.c b/src/misc/threads.c index 794e1c0a2b..8d52580bb7 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -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 -- 2.39.2