diff options
author | Thomas Graf <tgraf@suug.ch> | 2012-11-15 21:30:57 +0100 |
---|---|---|
committer | Thomas Graf <tgraf@suug.ch> | 2012-11-15 21:30:57 +0100 |
commit | 20efa14e5c188738c15a013e092af51b780fde61 (patch) | |
tree | c2c3ef38df936c557d78b9069d1ab4dab756eb47 /lib/socket.c | |
parent | 3ed1f9ab5fba2b43fb3c67ac03e0da90ac042ed0 (diff) | |
download | libnl-20efa14e5c188738c15a013e092af51b780fde61.tar.gz |
lock abstraction layer
Hide pthread availability and enablement behind internal API
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Diffstat (limited to 'lib/socket.c')
-rw-r--r-- | lib/socket.c | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/lib/socket.c b/lib/socket.c index 0335f07..b30058b 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -29,10 +29,6 @@ #include "defs.h" -#ifndef DISABLE_PTHREADS -#include <pthread.h> -#endif - #include <netlink-local.h> #include <netlink/netlink.h> #include <netlink/utils.h> @@ -61,18 +57,14 @@ static void __init init_default_cb(void) } static uint32_t used_ports_map[32]; -#ifndef DISABLE_PTHREADS -static pthread_mutex_t port_map_mutex = PTHREAD_MUTEX_INITIALIZER; -#endif +static NL_RW_LOCK(port_map_lock); static uint32_t generate_local_port(void) { int i, n; uint32_t pid = getpid() & 0x3FFFFF; -#ifndef DISABLE_PTHREADS - pthread_mutex_lock(&port_map_mutex); -#endif + nl_write_lock(&port_map_lock); for (i = 0; i < 32; i++) { if (used_ports_map[i] == 0xFFFFFFFF) @@ -88,17 +80,13 @@ static uint32_t generate_local_port(void) /* PID_MAX_LIMIT is currently at 2^22, leaving 10 bit * to, i.e. 1024 unique ports per application. */ -#ifndef DISABLE_PTHREADS - pthread_mutex_unlock(&port_map_mutex); -#endif + nl_write_unlock(&port_map_lock); return pid + (n << 22); } } -#ifndef DISABLE_PTHREADS - pthread_mutex_unlock(&port_map_mutex); -#endif + nl_write_unlock(&port_map_lock); /* Out of sockets in our own PID namespace, what to do? FIXME */ return UINT_MAX; @@ -113,13 +101,9 @@ static void release_local_port(uint32_t port) nr = port >> 22; -#ifndef DISABLE_PTHREADS - pthread_mutex_lock(&port_map_mutex); -#endif + nl_write_lock(&port_map_lock); used_ports_map[nr / 32] &= ~(1 << (nr % 32)); -#ifndef DISABLE_PTHREADS - pthread_mutex_unlock(&port_map_mutex); -#endif + nl_write_unlock(&port_map_lock); } /** |