<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/26352">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">hodec2: fix segv for inter-BSC ho target<br><br>Related: OS#5324 SYS#5259<br>Change-Id: I5a3345ab0005a73597f5c27207480912a2f5aae6<br>---<br>M src/osmo-bsc/handover_decision_2.c<br>1 file changed, 30 insertions(+), 18 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/52/26352/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/handover_decision_2.c b/src/osmo-bsc/handover_decision_2.c</span><br><span>index 6730f26..14bc2d4 100644</span><br><span>--- a/src/osmo-bsc/handover_decision_2.c</span><br><span>+++ b/src/osmo-bsc/handover_decision_2.c</span><br><span>@@ -1027,27 +1027,39 @@</span><br><span>            break;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   chan_counts_for_bts(&bts_counts, c->target.bts);</span><br><span style="color: hsl(0, 100%, 40%);">- c->target.free_tchf = bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_TCH_F];</span><br><span style="color: hsl(0, 100%, 40%);">-  c->target.min_free_tchf = ho_get_hodec2_tchf_min_slots(c->target.bts->ho);</span><br><span style="color: hsl(0, 100%, 40%);">-     c->target.free_tchh = bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_TCH_H];</span><br><span style="color: hsl(0, 100%, 40%);">-  c->target.min_free_tchh = ho_get_hodec2_tchh_min_slots(c->target.bts->ho);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* For inter-BSC handover, the target BTS is in a different BSC and hence NULL here. */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (c->target.bts) {</span><br><span style="color: hsl(120, 100%, 40%);">+               chan_counts_for_bts(&bts_counts, c->target.bts);</span><br><span style="color: hsl(120, 100%, 40%);">+               c->target.free_tchf = bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_TCH_F];</span><br><span style="color: hsl(120, 100%, 40%);">+                c->target.min_free_tchf = ho_get_hodec2_tchf_min_slots(c->target.bts->ho);</span><br><span style="color: hsl(120, 100%, 40%);">+           c->target.free_tchh = bts_counts.val[CHAN_COUNTS1_ALL][CHAN_COUNTS2_FREE][GSM_LCHAN_TCH_H];</span><br><span style="color: hsl(120, 100%, 40%);">+                c->target.min_free_tchh = ho_get_hodec2_tchh_min_slots(c->target.bts->ho);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Would the next TCH/F lchan occupy a dynamic timeslot that currently counts for free TCH/H timeslots? */</span><br><span style="color: hsl(0, 100%, 40%);">-      next_lchan = lchan_avail_by_type(c->target.bts, GSM_LCHAN_TCH_F, false);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (next_lchan && next_lchan->ts->pchan_on_init == GSM_PCHAN_OSMO_DYN)</span><br><span style="color: hsl(0, 100%, 40%);">-            c->target.next_tchf_reduces_tchh = 2;</span><br><span style="color: hsl(0, 100%, 40%);">-        else</span><br><span style="color: hsl(0, 100%, 40%);">-            c->target.next_tchf_reduces_tchh = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Would the next TCH/F lchan occupy a dynamic timeslot that currently counts for free TCH/H timeslots?</span><br><span style="color: hsl(120, 100%, 40%);">+                */</span><br><span style="color: hsl(120, 100%, 40%);">+           next_lchan = lchan_avail_by_type(c->target.bts, GSM_LCHAN_TCH_F, false);</span><br><span style="color: hsl(120, 100%, 40%);">+           if (next_lchan && next_lchan->ts->pchan_on_init == GSM_PCHAN_OSMO_DYN)</span><br><span style="color: hsl(120, 100%, 40%);">+                  c->target.next_tchf_reduces_tchh = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+              else</span><br><span style="color: hsl(120, 100%, 40%);">+                  c->target.next_tchf_reduces_tchh = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* Would the next TCH/H lchan occupy a dynamic timeslot that currently counts for free TCH/F timeslots?</span><br><span style="color: hsl(0, 100%, 40%);">-  * Note that a dyn TS already in TCH/H mode (half occupied) would not reduce free TCH/F. */</span><br><span style="color: hsl(0, 100%, 40%);">-     next_lchan = lchan_avail_by_type(c->target.bts, GSM_LCHAN_TCH_H, false);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (next_lchan && next_lchan->ts->pchan_on_init == GSM_PCHAN_OSMO_DYN</span><br><span style="color: hsl(0, 100%, 40%);">-         && next_lchan->ts->pchan_is != GSM_PCHAN_TCH_H)</span><br><span style="color: hsl(0, 100%, 40%);">-               c->target.next_tchh_reduces_tchf = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        else</span><br><span style="color: hsl(120, 100%, 40%);">+          /* Would the next TCH/H lchan occupy a dynamic timeslot that currently counts for free TCH/F timeslots?</span><br><span style="color: hsl(120, 100%, 40%);">+                * Note that a dyn TS already in TCH/H mode (half occupied) would not reduce free TCH/F. */</span><br><span style="color: hsl(120, 100%, 40%);">+           next_lchan = lchan_avail_by_type(c->target.bts, GSM_LCHAN_TCH_H, false);</span><br><span style="color: hsl(120, 100%, 40%);">+           if (next_lchan && next_lchan->ts->pchan_on_init == GSM_PCHAN_OSMO_DYN</span><br><span style="color: hsl(120, 100%, 40%);">+               && next_lchan->ts->pchan_is != GSM_PCHAN_TCH_H)</span><br><span style="color: hsl(120, 100%, 40%);">+                     c->target.next_tchh_reduces_tchf = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+              else</span><br><span style="color: hsl(120, 100%, 40%);">+                  c->target.next_tchh_reduces_tchf = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            c->target.free_tchf = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+           c->target.min_free_tchf = 0;</span><br><span>              c->target.next_tchh_reduces_tchf = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              c->target.free_tchh = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+           c->target.min_free_tchh = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+               c->target.next_tchf_reduces_tchh = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span> }</span><br><span> </span><br><span> /* add candidate for re-assignment within the current cell */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/26352">change 26352</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/+/26352"/><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: I5a3345ab0005a73597f5c27207480912a2f5aae6 </div>
<div style="display:none"> Gerrit-Change-Number: 26352 </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>