Codebase list slapi-nis / 578a55b
- separate which thread creation/manipulation/destruction API we use from which rwlock creation/manipulation/destruction API we use Nalin Dahyabhai 12 years ago
2 changed file(s) with 20 addition(s) and 14 deletion(s). Raw diff Collapse all Expand all
9494 CFLAGS="$saved_CFLAGS"
9595 LIBS="$saved_LIBS"
9696 AC_DEFINE(USE_NSPR_THREADS,1,[Define to use NSPR threading functions.])
97 AC_DEFINE(USE_NSPR_LOCKS,1,[Define to use NSPR read/write locks.])
9798 ;;
9899 *)
99100 RUNTIME_CFLAGS=
105106 AC_ERROR([<slapi-plugin.h> not found])
106107 fi
107108 AC_DEFINE(USE_PTHREADS,1,[Define to use POSIX threading functions.])
109 AC_DEFINE(USE_PTHREAD_LOCKS,1,[Define to use POSIX read/write locks.])
108110 saved_LIBS="$LIBS"
109111 LIBS=
110112 AC_CHECK_FUNC(pthread_create,,AC_CHECK_LIB(pthread,pthread_create))
3838 #include <slapi-plugin.h>
3939 #endif
4040
41 #ifdef USE_PTHREADS
41 #if defined(USE_NSPR_THREADS) || defined(USE_NSPR_LOCKS)
42 #include <nspr.h>
43 #endif
44
45 #if defined(USE_PTHREADS) || defined(USE_PTHREAD_LOCKS)
4246 #include <pthread.h>
4347 #endif
4448
6367 };
6468
6569 struct wrapped_rwlock {
66 #if defined(USE_PTHREADS)
70 #if defined(USE_PTHREAD_LOCKS)
6771 pthread_rwlock_t rwlock;
68 #elif defined(USE_NSPR_THREADS)
72 #elif defined(USE_NSPR_LOCKS)
6973 PRRWLock *rwlock;
7074 #else
71 #error "Unknown threading model!"
75 #error "Unknown thread-safe locking model!"
7276 #endif
7377 };
7478
170174 if (rwlock == NULL) {
171175 return NULL;
172176 }
173 #ifdef USE_PTHREADS
177 #ifdef USE_PTHREAD_LOCKS
174178 if (pthread_rwlock_init(&rwlock->rwlock, NULL) != 0) {
175179 free(rwlock);
176180 return NULL;
177181 }
178182 #endif
179 #ifdef USE_NSPR_THREADS
183 #ifdef USE_NSPR_LOCKS
180184 rwlock->rwlock = PR_NewRWLock(PR_RWLOCK_RANK_NONE,
181185 PACKAGE_NAME "-rw-lock");
182186 if (rwlock->rwlock == NULL) {
190194 void
191195 wrap_free_rwlock(struct wrapped_rwlock *rwlock)
192196 {
193 #ifdef USE_PTHREADS
197 #ifdef USE_PTHREAD_LOCKS
194198 pthread_rwlock_destroy(&rwlock->rwlock);
195199 #endif
196 #ifdef USE_NSPR_THREADS
200 #ifdef USE_NSPR_LOCKS
197201 PR_DestroyRWLock(rwlock->rwlock);
198202 #endif
199203 free(rwlock);
202206 void
203207 wrap_rwlock_rdlock(struct wrapped_rwlock *rwlock)
204208 {
205 #ifdef USE_PTHREADS
209 #ifdef USE_PTHREAD_LOCKS
206210 pthread_rwlock_rdlock(&rwlock->rwlock);
207211 #endif
208 #ifdef USE_NSPR_THREADS
212 #ifdef USE_NSPR_LOCKS
209213 PR_RWLock_Rlock(rwlock->rwlock);
210214 #endif
211215 }
213217 void
214218 wrap_rwlock_wrlock(struct wrapped_rwlock *rwlock)
215219 {
216 #ifdef USE_PTHREADS
220 #ifdef USE_PTHREAD_LOCKS
217221 pthread_rwlock_wrlock(&rwlock->rwlock);
218222 #endif
219 #ifdef USE_NSPR_THREADS
223 #ifdef USE_NSPR_LOCKS
220224 PR_RWLock_Wlock(rwlock->rwlock);
221225 #endif
222226 }
224228 void
225229 wrap_rwlock_unlock(struct wrapped_rwlock *rwlock)
226230 {
227 #ifdef USE_PTHREADS
231 #ifdef USE_PTHREAD_LOCKS
228232 pthread_rwlock_unlock(&rwlock->rwlock);
229233 #endif
230 #ifdef USE_NSPR_THREADS
234 #ifdef USE_NSPR_LOCKS
231235 PR_RWLock_Unlock(rwlock->rwlock);
232236 #endif
233237 }