aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-09-28 16:49:33 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2021-09-28 16:53:00 +0200
commitcee6b122c2da140c05055e7570b61ea33bdfcfe8 (patch)
treebaf6be3c74133bdeab4c4f7c088e32f5bb462e55
parente9db5c738721f7aa5d5512e0f77beefad8721986 (diff)
tbf_fsm: Ignore event DL_ACKNACK_MISS in state RELEASING
Fixes following error log line: "{RELEASING}: Event DL_ACKNACK_MISS not permitted" Rationale: We may move to RELEASING state at some point, for instance due to MAX_N3101/MAX_N3105 while still having some active poll registered in some PDCH ulc. Upon that poll (most probably) timing out, it will send a DL_ACKNACK_MISS event to us. Since we are already determined to release the TBF (waiting for T3195 or T3169 to trigger), simply ignore the event and avoid logging an error. Fixes: OS#5240 Change-Id: Ibfb49356d2b3b5fccb6d59db8593b2256e5c51fb
-rw-r--r--src/tbf_fsm.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/tbf_fsm.c b/src/tbf_fsm.c
index be3c3efa..4202a0c4 100644
--- a/src/tbf_fsm.c
+++ b/src/tbf_fsm.c
@@ -323,6 +323,18 @@ static void st_releasing_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state)
osmo_timer_schedule(&fi->timer, val, 0);
}
+static void st_releasing(struct osmo_fsm_inst *fi, uint32_t event, void *data)
+{
+ switch (event) {
+ case TBF_EV_DL_ACKNACK_MISS:
+ /* Ignore, we don't care about missed DL ACK/NACK poll timeouts
+ * anymore, we are already releasing the TBF */
+ break;
+ default:
+ OSMO_ASSERT(0);
+ }
+}
+
static void handle_timeout_X2002(struct tbf_fsm_ctx *ctx)
{
struct gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(ctx->tbf);
@@ -441,10 +453,11 @@ static struct osmo_fsm_state tbf_fsm_states[] = {
},
[TBF_ST_RELEASING] = {
.in_event_mask =
- 0,
+ X(TBF_EV_DL_ACKNACK_MISS),
.out_state_mask =
0,
.name = "RELEASING",
+ .action = st_releasing,
.onenter = st_releasing_on_enter,
},
};