X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap_r%2Fthr_posix.c;h=3d0bba9f93132e207d6518789c524a190f1a6cda;hb=295f3ba0aa4cdce147612da6400f93e8f4b0a79f;hp=b66cf7861cdfb7112e56885d76f3068b33021a5e;hpb=72bf2552ebbcc15db956d0407d00c4a8ad863abb;p=openldap diff --git a/libraries/libldap_r/thr_posix.c b/libraries/libldap_r/thr_posix.c index b66cf7861c..3d0bba9f93 100644 --- a/libraries/libldap_r/thr_posix.c +++ b/libraries/libldap_r/thr_posix.c @@ -18,38 +18,39 @@ #include -#include "ldap_int_thread.h" +#include "ldap_pvt_thread.h" #if HAVE_PTHREADS_D4 -# define LDAP_PVT_THREAD_ATTR_DEFAULT pthread_attr_default -# define LDAP_PVT_THREAD_CONDATTR_DEFAULT pthread_condattr_default -# define LDAP_PVT_THREAD_MUTEXATTR_DEFAULT pthread_mutexattr_default +# define LDAP_INT_THREAD_ATTR_DEFAULT pthread_attr_default +# define LDAP_INT_THREAD_CONDATTR_DEFAULT pthread_condattr_default +# define LDAP_INT_THREAD_MUTEXATTR_DEFAULT pthread_mutexattr_default #else -# define LDAP_PVT_THREAD_ATTR_DEFAULT NULL -# define LDAP_PVT_THREAD_CONDATTR_DEFAULT NULL -# define LDAP_PVT_THREAD_MUTEXATTR_DEFAULT NULL +# define LDAP_INT_THREAD_ATTR_DEFAULT NULL +# define LDAP_INT_THREAD_CONDATTR_DEFAULT NULL +# define LDAP_INT_THREAD_MUTEXATTR_DEFAULT NULL #endif int ldap_int_thread_initialize( void ) { -#if defined( LDAP_THREAD_CONCURRENCY ) && HAVE_PTHREAD_SETCONCURRENCY - ldap_int_thread_set_concurrency( LDAP_THREAD_CONCURRENCY ); -#endif return 0; } int ldap_int_thread_destroy( void ) { +#ifdef HAVE_PTHREAD_KILL_OTHER_THREADS_NP + /* LinuxThreads: kill clones */ + pthread_kill_other_threads_np(); +#endif return 0; } #ifdef HAVE_PTHREAD_SETCONCURRENCY int -ldap_int_thread_set_concurrency(int n) +ldap_pvt_thread_set_concurrency(int n) { #ifdef HAVE_PTHREAD_SETCONCURRENCY return pthread_setconcurrency( n ); @@ -63,7 +64,7 @@ ldap_int_thread_set_concurrency(int n) #ifdef HAVE_PTHREAD_GETCONCURRENCY int -ldap_int_thread_get_concurrency(void) +ldap_pvt_thread_get_concurrency(void) { #ifdef HAVE_PTHREAD_GETCONCURRENCY return pthread_getconcurrency(); @@ -76,7 +77,7 @@ ldap_int_thread_get_concurrency(void) #endif int -ldap_int_thread_create( ldap_int_thread_t * thread, +ldap_pvt_thread_create( ldap_pvt_thread_t * thread, int detach, void *(*start_routine)( void * ), void *arg) @@ -91,7 +92,7 @@ ldap_int_thread_create( ldap_int_thread_t * thread, rtn = pthread_create( thread, &attr, start_routine, arg ); #else - rtn = pthread_create( thread, LDAP_PVT_THREAD_ATTR_DEFAULT, + rtn = pthread_create( thread, LDAP_INT_THREAD_ATTR_DEFAULT, start_routine, arg ); #endif @@ -106,13 +107,13 @@ ldap_int_thread_create( ldap_int_thread_t * thread, } void -ldap_int_thread_exit( void *retval ) +ldap_pvt_thread_exit( void *retval ) { pthread_exit( retval ); } int -ldap_int_thread_join( ldap_int_thread_t thread, void **thread_return ) +ldap_pvt_thread_join( ldap_pvt_thread_t thread, void **thread_return ) { #if !defined( HAVE_PTHREADS_FINAL ) void *dummy; @@ -123,7 +124,7 @@ ldap_int_thread_join( ldap_int_thread_t thread, void **thread_return ) } int -ldap_int_thread_kill( ldap_int_thread_t thread, int signo ) +ldap_pvt_thread_kill( ldap_pvt_thread_t thread, int signo ) { #ifdef HAVE_PTHREAD_KILL return pthread_kill( thread, signo ); @@ -136,7 +137,7 @@ ldap_int_thread_kill( ldap_int_thread_t thread, int signo ) } int -ldap_int_thread_yield( void ) +ldap_pvt_thread_yield( void ) { #ifdef _POSIX_THREAD_IS_GNU_PTH sched_yield(); @@ -158,65 +159,111 @@ ldap_int_thread_yield( void ) } int -ldap_int_thread_cond_init( ldap_int_thread_cond_t *cond ) +ldap_pvt_thread_cond_init( ldap_pvt_thread_cond_t *cond ) { - return pthread_cond_init( cond, LDAP_PVT_THREAD_CONDATTR_DEFAULT ); + return pthread_cond_init( cond, LDAP_INT_THREAD_CONDATTR_DEFAULT ); } int -ldap_int_thread_cond_destroy( ldap_int_thread_cond_t *cond ) +ldap_pvt_thread_cond_destroy( ldap_pvt_thread_cond_t *cond ) { return pthread_cond_destroy( cond ); } int -ldap_int_thread_cond_signal( ldap_int_thread_cond_t *cond ) +ldap_pvt_thread_cond_signal( ldap_pvt_thread_cond_t *cond ) { return pthread_cond_signal( cond ); } int -ldap_int_thread_cond_broadcast( ldap_int_thread_cond_t *cond ) +ldap_pvt_thread_cond_broadcast( ldap_pvt_thread_cond_t *cond ) { return pthread_cond_broadcast( cond ); } int -ldap_int_thread_cond_wait( ldap_int_thread_cond_t *cond, - ldap_int_thread_mutex_t *mutex ) +ldap_pvt_thread_cond_wait( ldap_pvt_thread_cond_t *cond, + ldap_pvt_thread_mutex_t *mutex ) { return pthread_cond_wait( cond, mutex ); } int -ldap_int_thread_mutex_init( ldap_int_thread_mutex_t *mutex ) +ldap_pvt_thread_mutex_init( ldap_pvt_thread_mutex_t *mutex ) { - return pthread_mutex_init( mutex, LDAP_PVT_THREAD_MUTEXATTR_DEFAULT ); + return pthread_mutex_init( mutex, LDAP_INT_THREAD_MUTEXATTR_DEFAULT ); } int -ldap_int_thread_mutex_destroy( ldap_int_thread_mutex_t *mutex ) +ldap_pvt_thread_mutex_destroy( ldap_pvt_thread_mutex_t *mutex ) { return pthread_mutex_destroy( mutex ); } int -ldap_int_thread_mutex_lock( ldap_int_thread_mutex_t *mutex ) +ldap_pvt_thread_mutex_lock( ldap_pvt_thread_mutex_t *mutex ) { return pthread_mutex_lock( mutex ); } int -ldap_int_thread_mutex_trylock( ldap_int_thread_mutex_t *mutex ) +ldap_pvt_thread_mutex_trylock( ldap_pvt_thread_mutex_t *mutex ) { return pthread_mutex_trylock( mutex ); } int -ldap_int_thread_mutex_unlock( ldap_int_thread_mutex_t *mutex ) +ldap_pvt_thread_mutex_unlock( ldap_pvt_thread_mutex_t *mutex ) { return pthread_mutex_unlock( mutex ); } +#ifdef LDAP_THREAD_HAVE_RDWR +#ifdef HAVE_PTHREAD_RWLOCK_DESTROY +int +ldap_pvt_thread_rdwr_init( ldap_pvt_thread_rdwr_t *rw ) +{ + return pthread_rwlock_init( rw, NULL ); +} + +int +ldap_pvt_thread_rdwr_destroy( ldap_pvt_thread_rdwr_t *rw ) +{ + return pthread_rwlock_destroy( rw ); +} + +int ldap_pvt_thread_rdwr_rlock( ldap_pvt_thread_rdwr_t *rw ) +{ + return pthread_rwlock_rdlock( rw ); +} + +int ldap_pvt_thread_rdwr_rtrylock( ldap_pvt_thread_rdwr_t *rw ) +{ + return pthread_rwlock_tryrdlock( rw ); +} + +int ldap_pvt_thread_rdwr_runlock( ldap_pvt_thread_rdwr_t *rw ) +{ + return pthread_rwlock_unlock( rw ); +} + +int ldap_pvt_thread_rdwr_wlock( ldap_pvt_thread_rdwr_t *rw ) +{ + return pthread_rwlock_wrlock( rw ); +} + +int ldap_pvt_thread_rdwr_wtrylock( ldap_pvt_thread_rdwr_t *rw ) +{ + return pthread_rwlock_trywrlock( rw ); +} + +int ldap_pvt_thread_rdwr_wunlock( ldap_pvt_thread_rdwr_t *rw ) +{ + return pthread_rwlock_unlock( rw ); +} + +#endif /* HAVE_PTHREAD_RDLOCK_DESTROY */ +#endif /* LDAP_THREAD_HAVE_RDWR */ #endif /* HAVE_PTHREADS */