pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-mgw/+/29318 )
Change subject: osmux: don't store conn ptr inside shared osmux_handle ......................................................................
osmux: don't store conn ptr inside shared osmux_handle
The struct osmux_handle is a shared structure which goes together 1-1 with libosmo-netif's struct osmux_in_handle, which is common to all CIDs to be muxed together. Hence, it makes no sense to store a specific conn object to it, since it actually manages several of them. Hence, all the conn specific stuff must be handled beforehand, not at osmux deliver time.
Related: SYS#5987 Change-Id: Ie739b556e9eb7d3133e798831a09728c7cc87135 --- M src/libosmo-mgcp/mgcp_osmux.c 1 file changed, 3 insertions(+), 8 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/18/29318/1
diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c index d9bccb4..f72af81 100644 --- a/src/libosmo-mgcp/mgcp_osmux.c +++ b/src/libosmo-mgcp/mgcp_osmux.c @@ -36,7 +36,6 @@
struct osmux_handle { struct llist_head head; - struct mgcp_conn_rtp *conn; struct osmux_in_handle *in; struct osmo_sockaddr rem_addr; int refcnt; @@ -48,14 +47,8 @@ static void osmux_deliver_cb(struct msgb *batch_msg, void *data) { struct osmux_handle *handle = data; - struct mgcp_conn_rtp *conn = handle->conn; socklen_t dest_len;
- if (!conn->end.output_enabled) { - msgb_free(batch_msg); - return; - } - switch (handle->rem_addr.u.sa.sa_family) { case AF_INET6: dest_len = sizeof(handle->rem_addr.u.sin6); @@ -130,7 +123,6 @@ h = talloc_zero(osmux, struct osmux_handle); if (!h) return NULL; - h->conn = conn; h->rem_addr = *rem_addr; h->refcnt++;
@@ -192,6 +184,9 @@ int ret; struct msgb *msg;
+ if (!conn->end.output_enabled) + return -1; + if (conn->osmux.state != OSMUX_STATE_ENABLED) { LOGPCONN(conn->conn, DOSMUX, LOGL_INFO, "forwarding RTP to Osmux conn not yet enabled, dropping (cid=%d)\n", conn->osmux.cid);