diff options
Diffstat (limited to 'src/gprs_rlcmac_ts_alloc.cpp')
-rw-r--r-- | src/gprs_rlcmac_ts_alloc.cpp | 14 |
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); } |