aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-10-14 19:27:49 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2021-10-14 19:31:18 +0200
commitb0aba591433c7c22298035453713724172d1cfbc (patch)
treee742b52f594d00d78be21d84c03cdf85d23a7ba7
parentb3291bc0e3170d502223975a6be52d749bd28396 (diff)
tbf: Drop pending polls during free also on states != ASSIGN
The situation holds true as long as the assignment is resolved. Hence, it can also happen that the TBF is in RELEASE state, because it was unable to do the assignment (and after retrying, MAX_N3105 moved it into RELEASING). Let's not explicitly check states, the other conditions should be enough. Related: SYS#5647 Change-Id: I05fb0ea44aeb3fbda9e8e1c449e9366efaa2c511
-rw-r--r--src/tbf.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 0331a808..23438625 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -245,11 +245,12 @@ static void tbf_unlink_pdch(struct gprs_rlcmac_tbf *tbf)
/* During assignment (state=ASSIGN), tbf may be temporarily using
* tbf->control_ts from a previous TBF/SBA to transmit the UL/DL
- * Assignment, which may not be necessarly be a TS where the current TBF
- * is attached to. Hence, we may have ULC pollings ongoing and we need
- * to make sure we drop all reserved nodes there: */
- if (tbf_state(tbf) == TBF_ST_ASSIGN &&
- tbf->control_ts != TBF_CONTROL_TS_UNSET && !tbf->pdch[tbf->control_ts])
+ * Assignment, which may not be necessarily be a TS where the current TBF
+ * is attached to. This will be the case until a TBF receives proper
+ * confirmation from the MS and goes through the FLOW state. Hence, we
+ * may have ULC pollings ongoing and we need to make sure we drop all
+ * reserved nodes there: */
+ if (tbf->control_ts != TBF_CONTROL_TS_UNSET && !tbf->pdch[tbf->control_ts])
pdch_ulc_release_tbf(tbf->trx->pdch[tbf->control_ts].ulc, tbf);
/* Now simply detach from all attached PDCHs */