<p>Pau Espin Pedrol has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12949">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Fix race condition in f_dyn_ipa_pdch_(de)act<br><br>Test BTS_Tests.TC_dyn_osmo_pdch_act_deact was sporadically failing due<br>to receiving IND_INFO on the PCU port with pdch_mask related TS bit set<br>to 0 after sending a PDCH ACT. That happened due to a race condition<br>because PCU send IND_INFO periodically. As a result, it can happen that<br>BTS sends an IND_INFO after PCU.clear was called and before the PDCH ACT<br>is handled.<br><br>Change-Id: If11ef05d97aa5f6caaa731f3817c1fecfc3edf7c<br>---<br>M bts/BTS_Tests.ttcn<br>1 file changed, 18 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/49/12949/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index f7caac2..230d3b6 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -3182,13 +3182,21 @@</span><br><span>        PCU.clear;</span><br><span>   RSL.send(ts_RSL_IPA_PDCH_ACT(g_chan_nr));</span><br><span>    /* expect INFO_IND on PCU interface listing TS as PDCH */</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T_wait := 2.0;</span><br><span style="color: hsl(120, 100%, 40%);">+  T_wait.start;</span><br><span>        alt {</span><br><span>        [] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {</span><br><span>               if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '1'B) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "PCUIF_INFO_IND PDCH_MASK not '1' after PDCH ACT");</span><br><span style="color: hsl(120, 100%, 40%);">+                      log("PCUIF_INFO_IND PDCH_MASK not yet '1' after PDCH ACT on TS", g_chan_nr.tn,</span><br><span style="color: hsl(120, 100%, 40%);">+                          " mask:", sd.data.u.info_ind.trx[trx_nr].pdch_mask);</span><br><span style="color: hsl(120, 100%, 40%);">+                    repeat;</span><br><span>              }</span><br><span>            }</span><br><span>    [] PCU.receive { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+    [] T_wait.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+           Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,</span><br><span style="color: hsl(120, 100%, 40%);">+                    log2str("Timeout waiting for PCUIF_INFO_IND PDCH_MASK to be '1' on TS", g_chan_nr.tn));</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    }</span><br><span>    /* try to activate this PDCH from the PCU point of view */</span><br><span>   PCU.send(t_SD_PCUIF(pcu_conn_id, ts_PCUIF_ACT_REQ(bts_nr, trx_nr, g_chan_nr.tn)));</span><br><span>@@ -3204,13 +3212,21 @@</span><br><span>         RSL.send(ts_RSL_IPA_PDCH_DEACT(g_chan_nr));</span><br><span>  PCU.clear;</span><br><span>   /* expect BTS to ask PCU to deactivate the channel */</span><br><span style="color: hsl(120, 100%, 40%);">+ timer T_wait := 2.0;</span><br><span style="color: hsl(120, 100%, 40%);">+  T_wait.start;</span><br><span>        alt {</span><br><span>        [] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {</span><br><span>               if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '0'B) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "PCUIF_INFO_IND PDCH_MASK not '0' after PDCH DEACT");</span><br><span style="color: hsl(120, 100%, 40%);">+                    log("PCUIF_INFO_IND PDCH_MASK not yet '0' after PDCH DEACT on TS", g_chan_nr.tn,</span><br><span style="color: hsl(120, 100%, 40%);">+                        " mask:", sd.data.u.info_ind.trx[trx_nr].pdch_mask);</span><br><span style="color: hsl(120, 100%, 40%);">+                    repeat;</span><br><span>              }</span><br><span>            }</span><br><span>    [] PCU.receive { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+    [] T_wait.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+           Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,</span><br><span style="color: hsl(120, 100%, 40%);">+                    log2str("Timeout waiting for PCUIF_INFO_IND PDCH_MASK to be '0' on TS", g_chan_nr.tn));</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    }</span><br><span>    /* Emulate PCU asking BTS to deactivate PDCH */</span><br><span>      PCU.send(t_SD_PCUIF(pcu_conn_id, ts_PCUIF_DEACT_REQ(bts_nr, trx_nr, g_chan_nr.tn)));</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12949">change 12949</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/12949"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: If11ef05d97aa5f6caaa731f3817c1fecfc3edf7c </div>
<div style="display:none"> Gerrit-Change-Number: 12949 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>