diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tbf.cpp | 12 | ||||
-rw-r--r-- | src/tbf.h | 2 | ||||
-rw-r--r-- | src/tbf_dl.cpp | 2 |
3 files changed, 11 insertions, 5 deletions
diff --git a/src/tbf.cpp b/src/tbf.cpp index ddc3b91f..e83873ab 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -263,18 +263,24 @@ void tbf_free(struct gprs_rlcmac_tbf *tbf) talloc_free(tbf); } -int gprs_rlcmac_tbf::update() +int gprs_rlcmac_tbf::update(GprsMs *ms_) { struct gprs_rlcmac_bts *bts_data = bts->bts_data(); - int rc; + int rc = -EINVAL; LOGP(DRLCMAC, LOGL_DEBUG, "********** TBF update **********\n"); if (direction != GPRS_RLCMAC_DL_TBF) return -EINVAL; + if (!ms_) + ms_ = ms(); + + if (!ms_) + return -EINVAL; + tbf_unlink_pdch(this); - rc = bts_data->alloc_algorithm(bts_data, ms(), this, bts_data->alloc_algorithm_curst, 0); + rc = bts_data->alloc_algorithm(bts_data, ms_, this, bts_data->alloc_algorithm_curst, 0); /* if no resource */ if (rc < 0) { LOGP(DRLCMAC, LOGL_ERROR, "No resource after update???\n"); @@ -131,7 +131,7 @@ struct gprs_rlcmac_tbf { int rlcmac_diag(); - int update(); + int update(GprsMs *ms = NULL); void handle_timeout(); void stop_timer(); void stop_t3191(); diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index c7a04bf4..771b35b8 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -869,7 +869,7 @@ void gprs_rlcmac_dl_tbf::reuse_tbf() state_flags &= GPRS_RLCMAC_FLAG_TO_MASK; state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH); - update(); + update(new_tbf->ms()); LOGP(DRLCMAC, LOGL_DEBUG, "%s Trigger dowlink assignment on PACCH, " "because another LLC PDU has arrived in between\n", |