<p>Neels Hofmeyr has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11666">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">lchan: release in error: fix missing messages / events<br><br>In the case where there is a release in error and we skip immediately to the RF<br>Release state, send all of Deact SACCH, RR Release messages and also signal the<br>lchan_rtp_fsm as appropriate.<br><br>Move that code to static lchan_do_release() and call from both<br>lchan_fsm_wait_rll_rtp_released_onenter() in the normal case, as well as<br>lchan_release() when skipping that.<br><br>When releasing in error, but we're already in LCHAN_ST_WAIT_RLL_RTP_RELEASED,<br>those messages have already been sent and we can skip them.<br><br>Change-Id: I648a9826ce56b611359f81462ca03e4ab4c736aa<br>---<br>M src/osmo-bsc/lchan_fsm.c<br>1 file changed, 18 insertions(+), 12 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/66/11666/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 e15adbe..2cb7c3e 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -927,6 +927,18 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void lchan_do_release(struct gsm_lchan *lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  if (lchan->do_rr_release && lchan->sapis[0] != LCHAN_SAPI_UNUSED)</span><br><span style="color: hsl(120, 100%, 40%);">+               gsm48_send_rr_release(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (lchan->fi_rtp)</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_fsm_inst_dispatch(lchan->fi_rtp, LCHAN_RTP_EV_RELEASE, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (lchan->deact_sacch && should_sacch_deact(lchan))</span><br><span style="color: hsl(120, 100%, 40%);">+               rsl_deact_sacch(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void lchan_fsm_wait_rll_rtp_released_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)</span><br><span> {</span><br><span>      int sapis;</span><br><span>@@ -937,14 +949,7 @@</span><br><span>            if (lchan->sapis[sapi])</span><br><span>                   LOG_LCHAN(lchan, LOGL_DEBUG, "SAPI[%d] = %d\n", sapi, lchan->sapis[sapi]);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (lchan->do_rr_release && lchan->sapis[0] != LCHAN_SAPI_UNUSED)</span><br><span style="color: hsl(0, 100%, 40%);">-         gsm48_send_rr_release(lchan);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   if (lchan->fi_rtp)</span><br><span style="color: hsl(0, 100%, 40%);">-           osmo_fsm_inst_dispatch(lchan->fi_rtp, LCHAN_RTP_EV_RELEASE, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      if (lchan->deact_sacch && should_sacch_deact(lchan))</span><br><span style="color: hsl(0, 100%, 40%);">-         rsl_deact_sacch(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+       lchan_do_release(lchan);</span><br><span> </span><br><span>         sapis = 0;</span><br><span>   for_each_active_sapi(sapi, 1, lchan) {</span><br><span>@@ -1317,10 +1322,11 @@</span><br><span>     if (lchan->release_in_error) {</span><br><span>            switch (lchan->fi->state) {</span><br><span>            default:</span><br><span style="color: hsl(0, 100%, 40%);">-                        /* Normally we deact SACCH in lchan_fsm_wait_rll_rtp_released_onenter(). When</span><br><span style="color: hsl(0, 100%, 40%);">-                    * skipping that, but asked to SACCH deact, do it now. */</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (lchan->deact_sacch)</span><br><span style="color: hsl(0, 100%, 40%);">-                              rsl_deact_sacch(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* Normally we signal release in lchan_fsm_wait_rll_rtp_released_onenter(). When</span><br><span style="color: hsl(120, 100%, 40%);">+                       * skipping that, do it now. */</span><br><span style="color: hsl(120, 100%, 40%);">+                       lchan_do_release(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+                      /* fall thru */</span><br><span style="color: hsl(120, 100%, 40%);">+               case LCHAN_ST_WAIT_RLL_RTP_RELEASED:</span><br><span>                         lchan_fsm_state_chg(LCHAN_ST_WAIT_RF_RELEASE_ACK);</span><br><span>                   goto exit_release_handler;</span><br><span>           case LCHAN_ST_WAIT_TS_READY:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11666">change 11666</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/11666"/><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-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I648a9826ce56b611359f81462ca03e4ab4c736aa </div>
<div style="display:none"> Gerrit-Change-Number: 11666 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>