globally lock the portrange when trying to grab a port to prep for multithreading

Change-Id: I78ae737b829bb428372f34db7d5bc601b5088b78
diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index ba80d7d..16b7dab 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -28,6 +28,7 @@
 #include <limits.h>
 #include <unistd.h>
 #include <errno.h>
+#include <pthread.h>
 
 #include <osmocom/core/msgb.h>
 #include <osmocom/core/talloc.h>
@@ -478,6 +479,7 @@
 
 	range = &endp->cfg->net_ports;
 
+	pthread_mutex_lock(&range->lock);
 	/* attempt to find a port */
 	tries = (range->range_end - range->range_start) / 2;
 	for (i = 0; i < tries; ++i) {
@@ -490,11 +492,12 @@
 
 		range->last_port += 2;
 		if (rc == 0) {
+			pthread_mutex_unlock(&range->lock);
 			return 0;
 		}
 
 	}
-
+	pthread_mutex_unlock(&range->lock);
 	LOGPENDP(endp, DLMGCP, LOGL_ERROR,
 	     "Allocating a RTP/RTCP port failed %u times.\n",
 	     tries);
@@ -1606,6 +1609,7 @@
 
 	osmo_strlcpy(cfg->domain, "mgw", sizeof(cfg->domain));
 
+	cfg->net_ports.lock = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;
 	cfg->net_ports.range_start = RTP_PORT_DEFAULT_RANGE_START;
 	cfg->net_ports.range_end = RTP_PORT_DEFAULT_RANGE_END;
 	cfg->net_ports.last_port = cfg->net_ports.range_start;