<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/26610">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">lchan/gscon: always clear both cross ref pointers<br><br>During specific release scenarios, it became clear that an lchan still<br>pointed at a conn even after it had been deallocated. That was due to<br>setting conn->lchan = NULL but not lchan->conn = NULL. Fix that.<br><br>Do lchan_forget_conn() first, because during gscon_forget_lchan() we may<br>enter the gscon clearing dance, which in case of no SCCP conn being<br>present will soon / should immediately deallocate the conn.<br><br>Related: OS#5337<br>Related: I8c8537acf6b47b121903197608636c43ae601a57 (osmo-bsc)<br>Change-Id: Idbfe4672233ba8105eff5ba77ee07fd871358255<br>---<br>M src/osmo-bsc/lchan_fsm.c<br>1 file changed, 7 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/10/26610/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index 5ae6df6..84f8dc5 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -478,8 +478,11 @@</span><br><span> {</span><br><span>        LOG_LCHAN(lchan, LOGL_DEBUG, "Clearing lchan state\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (lchan->conn)</span><br><span style="color: hsl(0, 100%, 40%);">-             gscon_forget_lchan(lchan->conn, lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (lchan->conn) {</span><br><span style="color: hsl(120, 100%, 40%);">+         struct gsm_subscriber_connection *conn = lchan->conn;</span><br><span style="color: hsl(120, 100%, 40%);">+              lchan_forget_conn(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+             gscon_forget_lchan(conn, lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span> </span><br><span>        if (lchan->rqd_ref) {</span><br><span>             talloc_free(lchan->rqd_ref);</span><br><span>@@ -1392,8 +1395,9 @@</span><br><span>       * lchan_reset(), we make sure it does. But in case of releases from error handling, the</span><br><span>      * conn might as well notice now already that its lchan is becoming unusable. */</span><br><span>     if (lchan->conn) {</span><br><span style="color: hsl(0, 100%, 40%);">-           gscon_forget_lchan(lchan->conn, lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+            struct gsm_subscriber_connection *conn = lchan->conn;</span><br><span>             lchan_forget_conn(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+             gscon_forget_lchan(conn, lchan);</span><br><span>     }</span><br><span> </span><br><span>        rc = rsl_tx_rf_chan_release(lchan);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/26610">change 26610</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-bsc/+/26610"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Idbfe4672233ba8105eff5ba77ee07fd871358255 </div>
<div style="display:none"> Gerrit-Change-Number: 26610 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>