aboutsummaryrefslogtreecommitdiffstats
path: root/src/gprs_rlcmac_ts_alloc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gprs_rlcmac_ts_alloc.cpp')
-rw-r--r--src/gprs_rlcmac_ts_alloc.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp
index bae1ea5f..29749b8e 100644
--- a/src/gprs_rlcmac_ts_alloc.cpp
+++ b/src/gprs_rlcmac_ts_alloc.cpp
@@ -117,13 +117,23 @@ static int find_enabled_pdch(struct gprs_rlcmac_trx *trx, const uint8_t start_ts
return 8;
}
+static void attach_tbf_to_pdch(struct gprs_rlcmac_pdch *pdch,
+ struct gprs_rlcmac_tbf *tbf)
+{
+ if (tbf->pdch[pdch->ts_no])
+ tbf->pdch[pdch->ts_no]->detach_tbf(tbf);
+
+ tbf->pdch[pdch->ts_no] = pdch;
+ pdch->attach_tbf(tbf);
+}
+
static void assign_uplink_tbf_usf(
struct gprs_rlcmac_pdch *pdch,
struct gprs_rlcmac_ul_tbf *tbf, int8_t usf)
{
tbf->trx->ul_tbf[tbf->tfi()] = tbf;
- tbf->pdch[pdch->ts_no] = pdch;
tbf->m_usf[pdch->ts_no] = usf;
+ attach_tbf_to_pdch(pdch, tbf);
}
static void assign_dlink_tbf(
@@ -131,7 +141,7 @@ static void assign_dlink_tbf(
struct gprs_rlcmac_dl_tbf *tbf)
{
tbf->trx->dl_tbf[tbf->tfi()] = tbf;
- tbf->pdch[pdch->ts_no] = pdch;
+ attach_tbf_to_pdch(pdch, tbf);
}