From e2a4344ba6b8b1c2be339fe1c500ec07817d5654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Tue, 22 Jul 2003 19:00:06 +0000 Subject: [PATCH] adding RWLOCKS and [sg]etspecific git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12490 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/heim_threads.h | 73 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/lib/krb5/heim_threads.h b/lib/krb5/heim_threads.h index 78a4d85a6..705099c32 100644 --- a/lib/krb5/heim_threads.h +++ b/lib/krb5/heim_threads.h @@ -63,6 +63,22 @@ #define HEIMDAL_MUTEX_unlock(m) mutex_unlock(m) #define HEIMDAL_MUTEX_destroy(m) mutex_destroy(m) +#define HEIMDAL_RWLOCK rwlock_t +#define HEIMDAL_RWLOCK_INITIALIZER RWLOCK_INITIALIZER +#define HEIMDAL_RWLOCK_init(l) rwlock_init(l, NULL) +#define HEIMDAL_RWLOCK_rdlock(l) rwlock_rdlock(l) +#define HEIMDAL_RWLOCK_wrlock(l) rwlock_wrlock(l) +#define HEIMDAL_RWLOCK_tryrdlock(l) rwlock_tryrdlock(l) +#define HEIMDAL_RWLOCK_trywrlock(l) rwlock_trywrlock(l) +#define HEIMDAL_RWLOCK_unlock(l) rwlock_unlock(l) +#define HEIMDAL_RWLOCK_destroy(l) rwlock_destroy(l) + +#define HEIMDAL_thread_key thread_key_t +#define HEIMDAL_key_create(k,d) thr_keycreate(k,d) +#define HEIMDAL_setspecific(k,s) thr_setspecific(k,s) +#define HEIMDAL_getspecific(k) thr_getspecific(k) +#define HEIMDAL_key_delete(k) thr_keydelete(k) + #elif defined(ENABLE_PTHREAD_SUPPORT) #define HEIMDAL_MUTEX pthread_mutex_t @@ -72,6 +88,22 @@ #define HEIMDAL_MUTEX_unlock(m) pthread_mutex_unlock(m) #define HEIMDAL_MUTEX_destroy(m) pthread_mutex_destroy(m) +#define HEIMDAL_RWLOCK rwlock_t +#define HEIMDAL_RWLOCK_INITIALIZER RWLOCK_INITIALIZER +#define HEIMDAL_RWLOCK_init(l) pthread_rwlock_init(l, NULL) +#define HEIMDAL_RWLOCK_rdlock(l) pthread_rwlock_rdlock(l) +#define HEIMDAL_RWLOCK_wrlock(l) pthread_rwlock_wrlock(l) +#define HEIMDAL_RWLOCK_tryrdlock(l) pthread_rwlock_tryrdlock(l) +#define HEIMDAL_RWLOCK_trywrlock(l) pthread_rwlock_trywrlock(l) +#define HEIMDAL_RWLOCK_unlock(l) pthread_rwlock_unlock(l) +#define HEIMDAL_RWLOCK_destroy(l) pthread_rwlock_destroy(l) + +#define HEIMDAL_thread_key pthread_key_t +#define HEIMDAL_key_create(k,d) pthread_key_create(k,d) +#define HEIMDAL_setspecific(k,s) pthread_setspecific(k,s) +#define HEIMDAL_getspecific(k) pthread_setspecific(k) +#define HEIMDAL_key_delete(k) pthread_key_delete(k) + #elif defined(HEIMDAL_DEBUG_THREADS) /* no threads support, just do consistency checks */ @@ -84,6 +116,18 @@ #define HEIMDAL_MUTEX_unlock(m) do { if ((*(m))-- != 1) abort(); } while(0) #define HEIMDAL_MUTEX_destroy(m) do {if ((*(m)) != 0) abort(); } while(0) +#define HEIMDAL_RWLOCK rwlock_t int +#define HEIMDAL_RWLOCK_INITIALIZER 0 +#define HEIMDAL_RWLOCK_init(l) do { } while(0) +#define HEIMDAL_RWLOCK_rdlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_wrlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_tryrdlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_trywrlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_unlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_destroy(l) do { } while(0) + +#define HEIMDAL_internal_thread_key 1 + #else /* no thread support, no debug case */ #define HEIMDAL_MUTEX int @@ -93,6 +137,35 @@ #define HEIMDAL_MUTEX_unlock(m) do { } while(0) #define HEIMDAL_MUTEX_destroy(m) do { } while(0) +#define HEIMDAL_RWLOCK rwlock_t int +#define HEIMDAL_RWLOCK_INITIALIZER 0 +#define HEIMDAL_RWLOCK_init(l) do { } while(0) +#define HEIMDAL_RWLOCK_rdlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_wrlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_tryrdlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_trywrlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_unlock(l) do { } while(0) +#define HEIMDAL_RWLOCK_destroy(l) do { } while(0) + +#define HEIMDAL_internal_thread_key 1 + #endif /* no thread support */ +#ifdef HEIMDAL_internal_thread_key + +typedef struct heim_thread_key { + void *value; + void (*destructor)(void *); +} heim_thread_key; + +#define HEIMDAL_thread_key heim_thread_key +#define HEIMDAL_key_create(k,d) \ + do { (k)->value = NULL; (k)->destructor = (d); } while(0) +#define HEIMDAL_setspecific(k,s) do { (k)->value = s ; } while(0) +#define HEIMDAL_getspecific(k) ((k)->value) +#define HEIMDAL_key_delete(k) do { (*(k)->destructor)((k)->value); } while(0) + +#undef HEIMDAL_internal_thread_key +#endif /* HEIMDAL_internal_thread_key */ + #endif /* HEIM_THREADS_H */