summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@redhat.com>2011-08-16 18:00:18 -0400
committerNalin Dahyabhai <nalin@redhat.com>2011-08-16 18:00:18 -0400
commit8af9fa08dc994c8a43ea7dc6254e10f5a0987fb7 (patch)
tree744dee102e6f7c5f979ed116494a2b44add2c7b3
parentc02febb57ba2130c3e68309b40644922ff361bdf (diff)
downloadslapi-nis-8af9fa08dc994c8a43ea7dc6254e10f5a0987fb7.tar.gz
slapi-nis-8af9fa08dc994c8a43ea7dc6254e10f5a0987fb7.tar.xz
slapi-nis-8af9fa08dc994c8a43ea7dc6254e10f5a0987fb7.zip
- when building for 389-ds, use Slapi_RWLocks if they appear to be available (the rest of #730394/#730403)
-rw-r--r--configure.ac13
-rw-r--r--slapi-nis.spec4
-rw-r--r--src/wrap.c23
3 files changed, 37 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index d91b16f..1981777 100644
--- a/configure.ac
+++ b/configure.ac
@@ -94,10 +94,17 @@ dirsrv)
if test x$ac_cv_header_dirsrv_slapi_plugin_h = xno ; then
AC_ERROR([<dirsrv/slapi-plugin.h> not found])
fi
+ AC_CHECK_DECLS(slapi_new_rwlock,,,
+ [AC_INCLUDES_DEFAULT
+ #include <dirsrv/slapi-plugin.h>])
CFLAGS="$saved_CFLAGS"
LIBS="$saved_LIBS"
thread_api=NSPR
- thread_lock_api=POSIX
+ if test x$ac_cv_decl_slapi_new_rwlock = xyes ; then
+ thread_lock_api=SLAPI
+ else
+ thread_lock_api=POSIX
+ fi
;;
*)
RUNTIME_CFLAGS=
@@ -126,7 +133,9 @@ else
AC_MSG_ERROR([no threading API selected])
fi
-if test $thread_lock_api = NSPR ; then
+if test $thread_lock_api = SLAPI ; then
+ AC_DEFINE(USE_SLAPI_LOCKS,1,[Define to use SLAPI read/write locks.])
+elif test $thread_lock_api = NSPR ; then
AC_DEFINE(USE_NSPR_LOCKS,1,[Define to use NSPR read/write locks.])
elif test $thread_lock_api = POSIX ; then
AC_DEFINE(USE_PTHREAD_LOCKS,1,[Define to use POSIX read/write locks.])
diff --git a/slapi-nis.spec b/slapi-nis.spec
index 746f8b8..a8f57f6 100644
--- a/slapi-nis.spec
+++ b/slapi-nis.spec
@@ -64,6 +64,10 @@ rm -rf $RPM_BUILD_ROOT
%{_sbindir}/nisserver-plugin-defs
%changelog
+* Tue Aug 16 2011 Nalin Dahyabhai <nalin@redhat.com> - 0.27-1
+- when building for 389-ds, use Slapi_RWLocks if they appear to be available
+ (the rest of #730394/#730403)
+
* Fri Aug 12 2011 Nalin Dahyabhai <nalin@redhat.com> - 0.26-1
- when building for 389-ds, use libpthread's read-write locks instead of
NSPR's (part of #730394/#730403)
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