Signed-off-by: Susant Sahani <ssahani@xxxxxxxxxx> --- src/bindresvport.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/bindresvport.c b/src/bindresvport.c index 6ce3e81..d26d754 100644 --- a/src/bindresvport.c +++ b/src/bindresvport.c @@ -46,6 +46,7 @@ #include <rpc/rpc.h> #include <string.h> +#include <reentrant.h> /* * Bind a socket to a privileged IP port @@ -79,17 +80,23 @@ bindresvport_sa(sd, sa) u_int16_t *portp; static u_int16_t port; static short startport = STARTPORT; + static pthread_mutex_t port_lock = PTHREAD_MUTEX_INITIALIZER; socklen_t salen; - int nports = ENDPORT - startport + 1; + int nports; int endport = ENDPORT; int i; + mutex_lock(&port_lock); + nports = ENDPORT - startport + 1; + if (sa == NULL) { salen = sizeof(myaddr); sa = (struct sockaddr *)&myaddr; - if (getsockname(sd, (struct sockaddr *)&myaddr, &salen) == -1) - return -1; /* errno is correctly set */ + if (getsockname(sd, (struct sockaddr *)&myaddr, &salen) == -1) { + mutex_unlock(&port_lock); + return -1; /* errno is correctly set */ + } af = myaddr.ss_family; } else @@ -112,6 +119,7 @@ bindresvport_sa(sd, sa) #endif default: errno = EPFNOSUPPORT; + mutex_unlock(&port_lock); return (-1); } sa->sa_family = af; @@ -137,6 +145,8 @@ bindresvport_sa(sd, sa) port = LOWPORT + port % (STARTPORT - LOWPORT); goto again; } + mutex_unlock(&port_lock); + return (res); } #else -- 1.8.4.2 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html