diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-10-14 19:27:49 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-10-14 19:31:18 +0200 |
commit | b0aba591433c7c22298035453713724172d1cfbc (patch) | |
tree | e742b52f594d00d78be21d84c03cdf85d23a7ba7 | |
parent | b3291bc0e3170d502223975a6be52d749bd28396 (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.cpp | 11 |
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 */ |