sba: Move freeing a sba into a central place

This commit is contained in:
Holger Hans Peter Freyther 2013-10-27 10:20:37 +01:00
parent 93e048fe27
commit b98dd9e240
3 changed files with 14 additions and 17 deletions

View File

@ -1052,10 +1052,7 @@ int gprs_rlcmac_pdch::rcv_control_block(
} else {
ta = sba->ta;
bts()->timing_advance()->remember(tlli, ta);
#warning "SBA deleted inline.. enforce capsulation"
bts()->sba_freed();
llist_del(&sba->list);
talloc_free(sba);
bts()->sba()->free_sba(sba);
}
if (ul_control_block->u.Packet_Resource_Request.Exist_MS_Radio_Access_capability)
ms_class = Decoding::get_ms_class_by_capability(&ul_control_block->u.Packet_Resource_Request.MS_Radio_Access_capability);
@ -1101,11 +1098,8 @@ int gprs_rlcmac_pdch::rcv_control_block(
"block, but there is no resource request "
"scheduled!\n");
} else {
#warning "SBA deleted inline.. enforce capsulation"
bts()->timing_advance()->remember(ul_control_block->u.Packet_Measurement_Report.TLLI, sba->ta);
bts()->sba_freed();
llist_del(&sba->list);
talloc_free(sba);
bts()->sba()->free_sba(sba);
}
gprs_rlcmac_meas_rep(&ul_control_block->u.Packet_Measurement_Report);
break;

View File

@ -124,14 +124,18 @@ uint32_t SBAController::sched(uint8_t trx, uint8_t ts, uint32_t fn, uint8_t bloc
int SBAController::timeout(struct gprs_rlcmac_sba *sba)
{
LOGP(DRLCMAC, LOGL_NOTICE, "Poll timeout for SBA\n");
llist_del(&sba->list);
m_bts.sba_timedout();
m_bts.sba_freed();
talloc_free(sba);
free_sba(sba);
return 0;
}
void SBAController::free_sba(gprs_rlcmac_sba *sba)
{
m_bts.sba_freed();
llist_del(&sba->list);
talloc_free(sba);
}
void SBAController::free_resources(struct gprs_rlcmac_pdch *pdch)
{
struct gprs_rlcmac_sba *sba, *sba2;
@ -139,10 +143,7 @@ void SBAController::free_resources(struct gprs_rlcmac_pdch *pdch)
const uint8_t ts_no = pdch->ts_no;
llist_for_each_entry_safe(sba, sba2, &m_sbas, list) {
if (sba->trx_no == trx_no && sba->ts_no == ts_no) {
llist_del(&sba->list);
m_bts.sba_freed();
talloc_free(sba);
}
if (sba->trx_no == trx_no && sba->ts_no == ts_no)
free_sba(sba);
}
}

View File

@ -61,6 +61,8 @@ public:
int timeout(struct gprs_rlcmac_sba *sba);
void free_resources(struct gprs_rlcmac_pdch *pdch);
void free_sba(gprs_rlcmac_sba *sba);
private:
BTS &m_bts;
llist_head m_sbas;