Change in osmo-mgw[master]: libosmo-mgcp-client: fix memleak: clear pending queue

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

fixeria gerrit-no-reply at lists.osmocom.org
Wed Jun 17 15:03:48 UTC 2020


fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-mgw/+/18881 )


Change subject: libosmo-mgcp-client: fix memleak: clear pending queue
......................................................................

libosmo-mgcp-client: fix memleak: clear pending queue

If the remote MGCP peer closes connection (or simply crashes), the
existing 'mgcp_response_pending' entities will never be removed
from the queue (mgcp->responses_pending).

This problem was noticed while running several LCLS test cases from
ttcn3-bsc-test. Every test case makes osmo-bsc leak two messages.

I found those messages suspicious and assumed that they're related:

  DLMGCP ERROR mgcp_client.c:700 Failed to read:
    r=127.0.0.1:2427<->l=127.0.0.1:2727: 111='Connection refused'
  DLMGCP ERROR mgcp_client.c:700 Failed to read:
    r=127.0.0.1:2427<->l=127.0.0.1:2727: 111='Connection refused'

Let's flush the pending response queue in such cases.

Change-Id: Ia2e89f31685a0822e5cb147a06cc1fc68efc1ec4
Related: OS#4619
---
M src/libosmo-mgcp-client/mgcp_client.c
1 file changed, 17 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/81/18881/1

diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c
index e9b3ec0..3df32aa 100644
--- a/src/libosmo-mgcp-client/mgcp_client.c
+++ b/src/libosmo-mgcp-client/mgcp_client.c
@@ -683,6 +683,19 @@
 	return rc;
 }
 
+static void mgcp_pending_flush(struct mgcp_client *mgcp)
+{
+	struct mgcp_response_pending *e;
+
+	while (!llist_empty(&mgcp->responses_pending)) {
+		e = llist_entry(mgcp->responses_pending.next,
+				struct mgcp_response_pending,
+				entry);
+		llist_del(&e->entry);
+		talloc_free(e);
+	}
+}
+
 static int mgcp_do_read(struct osmo_fd *fd)
 {
 	struct mgcp_client *mgcp = fd->data;
@@ -700,6 +713,10 @@
 		LOGP(DLMGCP, LOGL_ERROR, "Failed to read: %s: %d='%s'\n", osmo_sock_get_name2(fd->fd),
 		     errno, strerror(errno));
 
+		/* Handle loss of connection (clear the queues) */
+		if (errno == ECONNREFUSED)
+			mgcp_pending_flush(mgcp);
+
 		msgb_free(msg);
 		return -1;
 	} else if (ret > 4096 - 128) {

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

Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Change-Id: Ia2e89f31685a0822e5cb147a06cc1fc68efc1ec4
Gerrit-Change-Number: 18881
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200617/7630ae04/attachment.htm>


More information about the gerrit-log mailing list