<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/18881">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">libosmo-mgcp-client: fix memleak: clear pending queue<br><br>If the remote MGCP peer closes connection (or simply crashes), the<br>existing 'mgcp_response_pending' entities will never be removed<br>from the queue (mgcp->responses_pending).<br><br>This problem was noticed while running several LCLS test cases from<br>ttcn3-bsc-test. Every test case makes osmo-bsc leak two messages.<br><br>I found those messages suspicious and assumed that they're related:<br><br>  DLMGCP ERROR mgcp_client.c:700 Failed to read:<br>    r=127.0.0.1:2427<->l=127.0.0.1:2727: 111='Connection refused'<br>  DLMGCP ERROR mgcp_client.c:700 Failed to read:<br>    r=127.0.0.1:2427<->l=127.0.0.1:2727: 111='Connection refused'<br><br>Let's flush the pending response queue in such cases.<br><br>Change-Id: Ia2e89f31685a0822e5cb147a06cc1fc68efc1ec4<br>Related: OS#4619<br>---<br>M src/libosmo-mgcp-client/mgcp_client.c<br>1 file changed, 17 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/81/18881/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>index e9b3ec0..3df32aa 100644</span><br><span>--- a/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>+++ b/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>@@ -683,6 +683,19 @@</span><br><span>    return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void mgcp_pending_flush(struct mgcp_client *mgcp)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      struct mgcp_response_pending *e;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    while (!llist_empty(&mgcp->responses_pending)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               e = llist_entry(mgcp->responses_pending.next,</span><br><span style="color: hsl(120, 100%, 40%);">+                              struct mgcp_response_pending,</span><br><span style="color: hsl(120, 100%, 40%);">+                         entry);</span><br><span style="color: hsl(120, 100%, 40%);">+               llist_del(&e->entry);</span><br><span style="color: hsl(120, 100%, 40%);">+          talloc_free(e);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int mgcp_do_read(struct osmo_fd *fd)</span><br><span> {</span><br><span>   struct mgcp_client *mgcp = fd->data;</span><br><span>@@ -700,6 +713,10 @@</span><br><span>               LOGP(DLMGCP, LOGL_ERROR, "Failed to read: %s: %d='%s'\n", osmo_sock_get_name2(fd->fd),</span><br><span>               errno, strerror(errno));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+             /* Handle loss of connection (clear the queues) */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (errno == ECONNREFUSED)</span><br><span style="color: hsl(120, 100%, 40%);">+                    mgcp_pending_flush(mgcp);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>          msgb_free(msg);</span><br><span>              return -1;</span><br><span>   } else if (ret > 4096 - 128) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/18881">change 18881</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-mgw/+/18881"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia2e89f31685a0822e5cb147a06cc1fc68efc1ec4 </div>
<div style="display:none"> Gerrit-Change-Number: 18881 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>