TBF: cleanup state flag handling
* introduce generic function to check whether particular flag was set
for'a TBF and clear it if necessary. Use this instead of
clear_poll_timeout_flag()
* add function to explicitly set assignment and appropriate state flags
Overall this makes the code easier to read and debug.
Related: OS#1759
Change-Id: Ic4560280c72f91700f2e19c6c7f6658dc29625c2
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index b871bc3..e3b0a9d 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -493,9 +493,7 @@
old_tbf->was_releasing = old_tbf->state_is(GPRS_RLCMAC_WAIT_RELEASE);
/* change state */
- set_state(GPRS_RLCMAC_ASSIGN);
- if (!(state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH)))
- state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
+ set_assigned_on(GPRS_RLCMAC_FLAG_PACCH, true);
/* start timer */
T_START(this, T0, T_ASS_PACCH_SEC, 0, "assignment (PACCH)", true);
@@ -505,8 +503,7 @@
was_releasing = state_is(GPRS_RLCMAC_WAIT_RELEASE);
/* change state */
- set_state(GPRS_RLCMAC_ASSIGN);
- state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH);
+ set_assigned_on(GPRS_RLCMAC_FLAG_CCCH, false);
/* send immediate assignment */
bts->snd_dl_ass(this, 0, imsi());
@@ -634,18 +631,12 @@
return bsn;
}
-void gprs_rlcmac_dl_tbf::clear_poll_timeout_flag()
-{
- state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);
-}
-
bool gprs_rlcmac_dl_tbf::handle_ack_nack()
{
bool ack_recovered = false;
state_flags |= (1 << GPRS_RLCMAC_FLAG_DL_ACK);
- if ((state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) {
- clear_poll_timeout_flag();
+ if (check_n_clear(GPRS_RLCMAC_FLAG_TO_DL_ACK)) {
ack_recovered = true;
}
@@ -856,7 +847,7 @@
if (is_final)
T_START(this, T3191, bts_data()->t3191, 0, "final block (DL-TBF)", true);
- clear_poll_timeout_flag();
+ state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK); /* clear poll timeout flag */
/* Clear request flag */
m_dl_ack_requested = false;