From 8af9fa08dc994c8a43ea7dc6254e10f5a0987fb7 Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Tue, 16 Aug 2011 18:00:18 -0400 Subject: - when building for 389-ds, use Slapi_RWLocks if they appear to be available (the rest of #730394/#730403) --- src/wrap.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/wrap.c') diff --git a/src/wrap.c b/src/wrap.c index ce15c8a..8ba56d2 100644 --- a/src/wrap.c +++ b/src/wrap.c @@ -68,7 +68,9 @@ struct wrapped_thread { }; struct wrapped_rwlock { -#if defined(USE_PTHREAD_LOCKS) +#if defined(USE_SLAPI_LOCKS) + Slapi_RWLock *rwlock; +#elif defined(USE_PTHREAD_LOCKS) pthread_rwlock_t rwlock; #elif defined(USE_NSPR_LOCKS) PRRWLock *rwlock; @@ -175,6 +177,13 @@ wrap_new_rwlock(void) if (rwlock == NULL) { return NULL; } +#ifdef USE_SLAPI_LOCKS + rwlock->rwlock = slapi_new_rwlock(); + if (rwlock->rwlock == NULL) { + free(rwlock); + return NULL; + } +#endif #ifdef USE_PTHREAD_LOCKS if (pthread_rwlock_init(&rwlock->rwlock, NULL) != 0) { free(rwlock); @@ -195,6 +204,9 @@ wrap_new_rwlock(void) void wrap_free_rwlock(struct wrapped_rwlock *rwlock) { +#ifdef USE_SLAPI_LOCKS + slapi_destroy_rwlock(rwlock->rwlock); +#endif #ifdef USE_PTHREAD_LOCKS pthread_rwlock_destroy(&rwlock->rwlock); #endif @@ -207,6 +219,9 @@ wrap_free_rwlock(struct wrapped_rwlock *rwlock) void wrap_rwlock_rdlock(struct wrapped_rwlock *rwlock) { +#ifdef USE_SLAPI_LOCKS + slapi_rwlock_rdlock(rwlock->rwlock); +#endif #ifdef USE_PTHREAD_LOCKS pthread_rwlock_rdlock(&rwlock->rwlock); #endif @@ -218,6 +233,9 @@ wrap_rwlock_rdlock(struct wrapped_rwlock *rwlock) void wrap_rwlock_wrlock(struct wrapped_rwlock *rwlock) { +#ifdef USE_SLAPI_LOCKS + slapi_rwlock_wrlock(rwlock->rwlock); +#endif #ifdef USE_PTHREAD_LOCKS pthread_rwlock_wrlock(&rwlock->rwlock); #endif @@ -229,6 +247,9 @@ wrap_rwlock_wrlock(struct wrapped_rwlock *rwlock) void wrap_rwlock_unlock(struct wrapped_rwlock *rwlock) { +#ifdef USE_SLAPI_LOCKS + slapi_rwlock_unlock(rwlock->rwlock); +#endif #ifdef USE_PTHREAD_LOCKS pthread_rwlock_unlock(&rwlock->rwlock); #endif -- cgit