laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-mgw/+/25424 )

Change subject: globally lock the portrange when trying to grab a port to prep 
for multithreading
......................................................................

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

Change-Id: I78ae737b829bb428372f34db7d5bc601b5088b78
---
M configure.ac
M include/osmocom/mgcp/mgcp.h
M src/libosmo-mgcp/mgcp_protocol.c
3 files changed, 10 insertions(+), 1 deletion(-)

Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved
  dexter: Looks good to me, but someone else must approve
  pespin: Looks good to me, but someone else must approve



diff --git a/configure.ac b/configure.ac
index 192c012..b996e87 100644
--- a/configure.ac
+++ b/configure.ac
@@ -57,6 +57,9 @@
 PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 1.1.0)
 PKG_CHECK_MODULES(LIBOSMOTRAU, libosmotrau >= 1.1.0)

+CFLAGS="$CFLAGS -pthread"
+LDFLAGS="$LDFLAGS -pthread"
+
 AC_ARG_ENABLE(sanitize,
        [AS_HELP_STRING(
                [--enable-sanitize],
diff --git a/include/osmocom/mgcp/mgcp.h b/include/osmocom/mgcp/mgcp.h
index b3f2eb5..228b0b3 100644
--- a/include/osmocom/mgcp/mgcp.h
+++ b/include/osmocom/mgcp/mgcp.h
@@ -34,6 +34,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
+#include <pthread.h>

 #include "mgcp_ratectr.h"

@@ -92,6 +93,7 @@
  * This holds information on how to allocate ports
  */
 struct mgcp_port_range {
+       pthread_mutex_t lock;
        /* addr or NULL to fall-back to default */
        char *bind_addr_v4;
        char *bind_addr_v6;
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;

--
To view, visit https://gerrit.osmocom.org/c/osmo-mgw/+/25424
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Change-Id: I78ae737b829bb428372f34db7d5bc601b5088b78
Gerrit-Change-Number: 25424
Gerrit-PatchSet: 12
Gerrit-Owner: Hoernchen <ew...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pma...@sysmocom.de>
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to