aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-27 10:20:37 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-30 21:24:12 +0100
commitb98dd9e24085bf6838b5f2a5717c3345d54acb51 (patch)
tree0ec13b7f36c7ec7524b07e704994ad2f4521b29f /src
parent93e048fe272d1d20522c26b96fc7e777255c6906 (diff)
sba: Move freeing a sba into a central place
Diffstat (limited to 'src')
-rw-r--r--src/bts.cpp10
-rw-r--r--src/sba.cpp17
-rw-r--r--src/sba.h2
3 files changed, 13 insertions, 16 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index 9c0fea29..3f9b24ac 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -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;
diff --git a/src/sba.cpp b/src/sba.cpp
index ddcbe52e..6eec235f 100644
--- a/src/sba.cpp
+++ b/src/sba.cpp
@@ -124,12 +124,16 @@ 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();
+ free_sba(sba);
+ return 0;
+}
+
+void SBAController::free_sba(gprs_rlcmac_sba *sba)
+{
m_bts.sba_freed();
+ llist_del(&sba->list);
talloc_free(sba);
-
- return 0;
}
void SBAController::free_resources(struct gprs_rlcmac_pdch *pdch)
@@ -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);
}
}
diff --git a/src/sba.h b/src/sba.h
index 5709ad4d..f39834a9 100644
--- a/src/sba.h
+++ b/src/sba.h
@@ -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;