From 769d0f414ec680c9d0802750dfdbc6451c4e5d02 Mon Sep 17 00:00:00 2001 From: vemax78 Date: Sat, 2 Nov 2013 19:04:56 +0100 Subject: [PATCH] Add support for rwlock --- build/ac/Makefile.am | 1 + src/common/capwap_rwlock.c | 45 ++++++++++++++++++++++++++++++++++++++ src/common/capwap_rwlock.h | 20 +++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 src/common/capwap_rwlock.c create mode 100644 src/common/capwap_rwlock.h diff --git a/build/ac/Makefile.am b/build/ac/Makefile.am index d9845e2..c264ffd 100755 --- a/build/ac/Makefile.am +++ b/build/ac/Makefile.am @@ -44,6 +44,7 @@ ac_SOURCES = \ $(capwap_SOURCES) \ $(top_srcdir)/src/common/capwap_event.c \ $(top_srcdir)/src/common/capwap_lock.c \ + $(top_srcdir)/src/common/capwap_rwlock.c \ $(top_srcdir)/src/common/capwap_socket.c \ $(top_srcdir)/src/ac/ac.c \ $(top_srcdir)/src/ac/ac_backend.c \ diff --git a/src/common/capwap_rwlock.c b/src/common/capwap_rwlock.c new file mode 100644 index 0000000..2d8c2ec --- /dev/null +++ b/src/common/capwap_rwlock.c @@ -0,0 +1,45 @@ +#include "capwap.h" +#include "capwap_rwlock.h" + +#ifndef CAPWAP_MULTITHREADING_ENABLE +#error "Warning: multithreading is disabled\n" +#endif + +/* */ +int capwap_rwlock_init(capwap_rwlock_t* lock) { + ASSERT(lock != NULL); + + if (pthread_rwlock_init(&lock->rwlock, NULL)) { + return 0; + } + + return 1; +} + +/* */ +void capwap_rwlock_destroy(capwap_rwlock_t* lock) { + ASSERT(lock != NULL); + + pthread_rwlock_destroy(&lock->rwlock); +} + +/* */ +void capwap_rwlock_rdlock(capwap_rwlock_t* lock) { + ASSERT(lock != NULL); + + pthread_rwlock_rdlock(&lock->rwlock); +} + +/* */ +void capwap_rwlock_wrlock(capwap_rwlock_t* lock) { + ASSERT(lock != NULL); + + pthread_rwlock_wrlock(&lock->rwlock); +} + +/* */ +void capwap_rwlock_exit(capwap_rwlock_t* lock) { + ASSERT(lock != NULL); + + pthread_rwlock_unlock(&lock->rwlock); +} diff --git a/src/common/capwap_rwlock.h b/src/common/capwap_rwlock.h new file mode 100644 index 0000000..5b626b1 --- /dev/null +++ b/src/common/capwap_rwlock.h @@ -0,0 +1,20 @@ +#ifndef __CAPWAP_RWLOCK_HEADER__ +#define __CAPWAP_RWLOCK_HEADER__ + +#ifdef CAPWAP_MULTITHREADING_ENABLE + +#include + +typedef struct { + pthread_rwlock_t rwlock; +} capwap_rwlock_t; + +int capwap_rwlock_init(capwap_rwlock_t* lock); +void capwap_rwlock_destroy(capwap_rwlock_t* lock); +void capwap_rwlock_rdlock(capwap_rwlock_t* lock); +void capwap_rwlock_wrlock(capwap_rwlock_t* lock); +void capwap_rwlock_exit(capwap_rwlock_t* lock); + +#endif /* CAPWAP_MULTITHREADING_ENABLE */ + +#endif /* __CAPWAP_RWLOCK_HEADER__ */