X-Git-Url: http://git.onelab.eu/?p=sliver-openvswitch.git;a=blobdiff_plain;f=lib%2Fovs-thread.c;h=4dfccaf3e5f8aae2d323615e28e33aa7236626e3;hp=f0b1e9e816191027c77be5dd640e1888bf118163;hb=6b59b543;hpb=5a0702383b61d329f0640b5b4da4869a4b4f1384 diff --git a/lib/ovs-thread.c b/lib/ovs-thread.c index f0b1e9e81..4dfccaf3e 100644 --- a/lib/ovs-thread.c +++ b/lib/ovs-thread.c @@ -125,6 +125,12 @@ XPTHREAD_FUNC1(pthread_mutexattr_destroy, pthread_mutexattr_t *); XPTHREAD_FUNC2(pthread_mutexattr_settype, pthread_mutexattr_t *, int); XPTHREAD_FUNC2(pthread_mutexattr_gettype, pthread_mutexattr_t *, int *); +XPTHREAD_FUNC1(pthread_rwlockattr_init, pthread_rwlockattr_t *); +XPTHREAD_FUNC1(pthread_rwlockattr_destroy, pthread_rwlockattr_t *); +#ifdef PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP +XPTHREAD_FUNC2(pthread_rwlockattr_setkind_np, pthread_rwlockattr_t *, int); +#endif + XPTHREAD_FUNC2(pthread_cond_init, pthread_cond_t *, pthread_condattr_t *); XPTHREAD_FUNC1(pthread_cond_destroy, pthread_cond_t *); XPTHREAD_FUNC1(pthread_cond_signal, pthread_cond_t *); @@ -183,13 +189,21 @@ void ovs_rwlock_init(const struct ovs_rwlock *l_) { struct ovs_rwlock *l = CONST_CAST(struct ovs_rwlock *, l_); + pthread_rwlockattr_t attr; int error; l->where = NULL; + + xpthread_rwlockattr_init(&attr); +#ifdef PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP + xpthread_rwlockattr_setkind_np( + &attr, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); +#endif error = pthread_rwlock_init(&l->lock, NULL); if (OVS_UNLIKELY(error)) { ovs_abort(error, "pthread_rwlock_init failed"); } + xpthread_rwlockattr_destroy(&attr); } void