From b8961522901cdb4169d0fd21f2b74583ddd94627 Mon Sep 17 00:00:00 2001 From: Bart Hartgers Date: Fri, 15 Jan 1999 14:31:12 +0000 Subject: [PATCH] Updates for the new threading and utility stuff in libldap{_r}. --- include/ac/string.h | 5 +- include/ldap_pvt.h | 38 ++++++ include/ldap_pvt_thread.h | 269 ++++++++++++++++++++++++++++++++++++++ include/lthread.h | 2 +- include/lthread_rdwr.h | 2 +- 5 files changed, 312 insertions(+), 4 deletions(-) create mode 100644 include/ldap_pvt.h create mode 100644 include/ldap_pvt_thread.h diff --git a/include/ac/string.h b/include/ac/string.h index 7a799e0d7f..744b4adabc 100644 --- a/include/ac/string.h +++ b/include/ac/string.h @@ -46,8 +46,9 @@ /* strdup() is missing, declare our own version */ extern char *strdup( const char *s ); #else - /* some systems have strdup, but fail to declare it */ - extern char *strdup(); + /* provide our own strdup */ + extern char *ldap_pvt_strdup( const char * s ); +# define strdup ldap_pvt_strdup #endif /* diff --git a/include/ldap_pvt.h b/include/ldap_pvt.h new file mode 100644 index 0000000000..f7ee989119 --- /dev/null +++ b/include/ldap_pvt.h @@ -0,0 +1,38 @@ +/* + * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted only + * as authorized by the OpenLDAP Public License. A copy of this + * license is available at http://www.OpenLDAP.org/license.html or + * in file LICENSE in the top-level directory of the distribution. + */ +/* + * ldap-pvt.h - Header for ldap_pvt_ functions. These are meant to be used + * by the OpenLDAP distribution only. + */ + +#ifndef _LDAP_PVT_H +#define _LDAP_PVT_H 1 + +struct hostent; /* avoid pulling in */ + +extern char *ldap_pvt_strtok( char *str, const char *delim, char **pos ); +extern char *ldap_pvt_ctime( const time_t *tp, char *buf ); +extern int ldap_pvt_gethostbyname_a( + const char *name, + struct hostent *resbuf, + char **buf, + struct hostent **result, + int *herrno_ptr ); +extern int ldap_pvt_gethostbyaddr_a( + const char *addr, + int len, + int type, + struct hostent *resbuf, + char **buf, + struct hostent **result, + int *herrno_ptr ); +extern void ldap_pvt_init_utils( void ); +#endif + diff --git a/include/ldap_pvt_thread.h b/include/ldap_pvt_thread.h new file mode 100644 index 0000000000..f42af3880c --- /dev/null +++ b/include/ldap_pvt_thread.h @@ -0,0 +1,269 @@ +/* + * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted only + * as authorized by the OpenLDAP Public License. A copy of this + * license is available at http://www.OpenLDAP.org/license.html or + * in file LICENSE in the top-level directory of the distribution. + */ +/* ldap_pvt_thread.h - ldap threads header file NG */ + +#ifndef _LDAP_PVT_THREAD_H +#define _LDAP_PVT_THREAD_H + +#include "portable.h" + +#if defined( HAVE_PTHREADS ) +/********************************** + * * + * definitions for POSIX Threads * + * * + **********************************/ + +#include +#ifdef HAVE_SCHED_H +#include +#endif + +LDAP_BEGIN_DECL + +typedef pthread_t ldap_pvt_thread_t; +typedef pthread_attr_t ldap_pvt_thread_attr_t; +typedef pthread_mutex_t ldap_pvt_thread_mutex_t; +typedef pthread_mutexattr_t ldap_pvt_thread_mutexattr_t; +typedef pthread_cond_t ldap_pvt_thread_cond_t; +typedef pthread_condattr_t ldap_pvt_thread_condattr_t; + +#define LDAP_PVT_THREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED +#define LDAP_PVT_THREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE + +#if defined( _POSIX_REENTRANT_FUNCTIONS ) || \ + defined( _POSIX_THREAD_SAFE_FUNCTIONS ) || \ + defined( _POSIX_THREAD_SAFE_FUNCTIONS ) +#define HAVE_REENTRANT_FUNCTIONS 1 +#endif + +LDAP_END_DECL + +#elif defined ( HAVE_MACH_CTHREADS ) +/********************************** + * * + * definitions for Mach CThreads * + * * + **********************************/ + +#include + +LDAP_BEGIN_DECL + +typedef cthread_t ldap_pvt_thread_t; +typedef int ldap_pvt_thread_attr_t; +typedef struct mutex ldap_pvt_thread_mutex_t; +typedef int ldap_pvt_thread_mutexattr_t; +typedef struct condition ldap_pvt_thread_cond_t; +typedef int ldap_pvt_thread_condattr_t; + +#define LDAP_PVT_THREAD_CREATE_DETACHED 1 +#define LDAP_PVT_THREAD_CREATE_JOINABLE 0 + +LDAP_END_DECL + +#elif defined( HAVE_THR ) +/************************************** + * * + * thread definitions for Solaris LWP * + * * + **************************************/ + +#include +#include + +LDAP_BEGIN_DECL + +typedef thread_t ldap_pvt_thread_t; +typedef int ldap_pvt_thread_attr_t; +typedef mutex_t ldap_pvt_thread_mutex_t; +typedef int ldap_pvt_thread_mutexattr_t; +typedef cond_t ldap_pvt_thread_cond_t; +typedef int ldap_pvt_thread_condattr_t; + +#define LDAP_PVT_THREAD_CREATE_DETACHED THR_DETACHED +#define LDAP_PVT_THREAD_CREATE_JOINABLE 0 + +#define HAVE_REENTRANT_FUNCTIONS 1 + +LDAP_END_DECL + +#elif defined( HAVE_LWP ) +/************************************* + * * + * thread definitions for SunOS LWP * + * * + *************************************/ + +#include +#include + +LDAP_BEGIN_DECL + +typedef thread_t ldap_pvt_thread_t; +typedef int ldap_pvt_thread_attr_t; +typedef mon_t ldap_pvt_thread_mutex_t; +typedef int ldap_pvt_thread_mutexattr_t; +struct lwpcv { + int lcv_created; + cv_t lcv_cv; +}; +typedef struct lwpcv ldap_pvt_thread_cond_t; +typedef int ldap_pvt_thread_condattr_t; + +#define LDAP_PVT_THREAD_CREATE_DETACHED 1 +#define LDAP_PVT_THREAD_CREATE_JOINABLE 0 + +#define HAVE_REENTRANT_FUNCTIONS 1 + +stkalign_t *ldap_pvt_thread_get_stack( int *stacknop ); +void ldap_pvt_thread_free_stack( int *stackno ); + +LDAP_END_DECL + +#elif HAVE_NT_THREADS + +#include +#include + +typedef HANDLE ldap_pvt_thread_t; +typedef int ldap_pvt_thread_attr_t; +typedef HANDLE ldap_pvt_thread_mutex_t; +typedef int ldap_pvt_thread_mutexattr_t; +typedef HANDLE ldap_pvt_thread_cond_t; +typedef int ldap_pvt_thread_condattr_t; + +#define LDAP_PVT_THREAD_CREATE_DETACHED 0 +#define LDAP_PVT_THREAD_CREATE_JOINABLE 0 + +#else + +/*********************************** + * * + * thread definitions for no * + * underlying library support * + * * + ***********************************/ + +LDAP_BEGIN_DECL + +#ifndef NO_THREADS +#define NO_THREADS 1 +#endif + +typedef int ldap_pvt_thread_t; +typedef int ldap_pvt_thread_attr_t; +typedef int ldap_pvt_thread_mutex_t; +typedef int ldap_pvt_thread_mutexattr_t; +typedef int ldap_pvt_thread_cond_t; +typedef int ldap_pvt_thread_condattr_t; + +#define LDAP_PVT_THREAD_CREATE_DETACHED 0 +#define LDAP_PVT_THREAD_CREATE_JOINABLE 0 + +LDAP_END_DECL + +#endif /* no threads support */ + +#ifndef NO_THREADS +# define HAVE_THREADS 1 +#endif + +LDAP_F int +ldap_pvt_thread_create LDAP_P(( ldap_pvt_thread_t * thread, + ldap_pvt_thread_attr_t *attr, + void *(*start_routine)( void *), + void *arg)); + +LDAP_F void +ldap_pvt_thread_exit LDAP_P(( void *retval )); + +LDAP_F int +ldap_pvt_thread_join LDAP_P(( ldap_pvt_thread_t thread, + void **thread_return )); + +LDAP_F int +ldap_pvt_thread_kill LDAP_P(( ldap_pvt_thread_t thread, int signo )); + +LDAP_F int +ldap_pvt_thread_yield LDAP_P(( void )); + +LDAP_F int +ldap_pvt_thread_attr_init LDAP_P(( ldap_pvt_thread_attr_t *attr )); + +LDAP_F int +ldap_pvt_thread_attr_destroy LDAP_P(( ldap_pvt_thread_attr_t *attr )); + +LDAP_F int +ldap_pvt_thread_attr_setdetachstate LDAP_P(( ldap_pvt_thread_attr_t *attr, + int dstate )); + +LDAP_F int +ldap_pvt_thread_cond_init LDAP_P(( ldap_pvt_thread_cond_t *cond, + ldap_pvt_thread_condattr_t *attr )); + +LDAP_F int +ldap_pvt_thread_cond_signal LDAP_P(( ldap_pvt_thread_cond_t *cond )); + +LDAP_F int +ldap_pvt_thread_cond_broadcast LDAP_P(( ldap_pvt_thread_cond_t *cond )); + +LDAP_F int +ldap_pvt_thread_cond_wait LDAP_P(( ldap_pvt_thread_cond_t *cond, + ldap_pvt_thread_mutex_t *mutex )); + +LDAP_F int +ldap_pvt_thread_mutex_init LDAP_P(( ldap_pvt_thread_mutex_t *mutex, + ldap_pvt_thread_mutexattr_t *attr )); + +LDAP_F int +ldap_pvt_thread_mutex_destroy LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); + +LDAP_F int +ldap_pvt_thread_mutex_lock LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); + +LDAP_F int +ldap_pvt_thread_mutex_unlock LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); + +#include + +typedef struct ldap_pvt_thread_rdwr_var { + int readers_reading; + int writer_writing; + ldap_pvt_thread_mutex_t mutex; + ldap_pvt_thread_cond_t lock_free; +} ldap_pvt_thread_rdwr_t; + +typedef void * ldap_pvt_thread_rdwrattr_t; + +LDAP_F int +ldap_pvt_thread_rdwr_init LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp, + ldap_pvt_thread_rdwrattr_t *attrp)); +LDAP_F int +ldap_pvt_thread_rdwr_rlock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); +LDAP_F int +ldap_pvt_thread_rdwr_runlock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); +LDAP_F int +ldap_pvt_thread_rdwr_wlock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); +LDAP_F int +ldap_pvt_thread_rdwr_wunlock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); + +#ifdef LDAP_DEBUG +LDAP_F int +ldap_pvt_thread_rdwr_rchk LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); +LDAP_F int +ldap_pvt_thread_rdwr_wchk LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); +LDAP_F int +ldap_pvt_thread_rdwr_rwchk LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); +#endif /* LDAP_DEBUG */ + +LDAP_END_DECL + +#endif /* _LDAP_THREAD_H */ diff --git a/include/lthread.h b/include/lthread.h index 8d66fcced6..f22aec429a 100644 --- a/include/lthread.h +++ b/include/lthread.h @@ -194,7 +194,7 @@ typedef mon_t pthread_mutex_t; /* condition variable attributes and condition variable type */ typedef int pthread_condattr_t; -typedef struct lwpcv { +typedef struct ldap_int_thread_cv { int lcv_created; cv_t lcv_cv; } pthread_cond_t; diff --git a/include/lthread_rdwr.h b/include/lthread_rdwr.h index c4beb36fa1..c09a7c5523 100644 --- a/include/lthread_rdwr.h +++ b/include/lthread_rdwr.h @@ -28,7 +28,7 @@ LDAP_BEGIN_DECL -typedef struct rdwr_var { +typedef struct ldap_pvt_thread_rdwr_var { int readers_reading; int writer_writing; pthread_mutex_t mutex; -- 2.39.5