diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-07-26 18:24:14 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-08-23 17:14:22 +0200 |
commit | 131deb059ff66b64fb8bfeaa487b4be07952ade6 (patch) | |
tree | 047417c24fb604d39ab5c926f4d74a8b47a659f3 | |
parent | 9dacf0b35bee54585bc9b29755824487d9262bba (diff) |
Move rate_ctr free to tbf subclass destructor
This way we clean up tbf_free entry point, and leave memory freeing for
later on at the end when talloc_free is called.
Change-Id: I1c45e3296e565725bcbbca391d9518772fffa89d
-rw-r--r-- | src/tbf.cpp | 11 | ||||
-rw-r--r-- | src/tbf_dl.cpp | 7 | ||||
-rw-r--r-- | src/tbf_ul.cpp | 7 | ||||
-rw-r--r-- | src/tbf_ul.h | 1 |
4 files changed, 15 insertions, 11 deletions
diff --git a/src/tbf.cpp b/src/tbf.cpp index ca0dc41b..16a53cc4 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -164,6 +164,7 @@ gprs_rlcmac_tbf::~gprs_rlcmac_tbf() { osmo_fsm_inst_free(state_fsm.fi); state_fsm.fi = NULL; + rate_ctr_group_free(m_ctrs); } uint32_t gprs_rlcmac_tbf::tlli() const @@ -269,19 +270,11 @@ void tbf_free(struct gprs_rlcmac_tbf *tbf) { /* update counters */ if (tbf->direction == GPRS_RLCMAC_UL_TBF) { - gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf(tbf); bts_do_rate_ctr_inc(tbf->bts, CTR_TBF_UL_FREED); if (tbf->state_is(TBF_ST_FLOW)) bts_do_rate_ctr_inc(tbf->bts, CTR_TBF_UL_ABORTED); - rate_ctr_group_free(ul_tbf->m_ul_egprs_ctrs); - rate_ctr_group_free(ul_tbf->m_ul_gprs_ctrs); } else { gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(tbf); - if (tbf->is_egprs_enabled()) { - rate_ctr_group_free(dl_tbf->m_dl_egprs_ctrs); - } else { - rate_ctr_group_free(dl_tbf->m_dl_gprs_ctrs); - } bts_do_rate_ctr_inc(tbf->bts, CTR_TBF_DL_FREED); if (tbf->state_is(TBF_ST_FLOW)) bts_do_rate_ctr_inc(tbf->bts, CTR_TBF_DL_ABORTED); @@ -297,8 +290,6 @@ void tbf_free(struct gprs_rlcmac_tbf *tbf) if (tbf->ms()) tbf->set_ms(NULL); - rate_ctr_group_free(tbf->m_ctrs); - LOGP(DTBF, LOGL_DEBUG, "********** %s-TBF ends here **********\n", (tbf->direction != GPRS_RLCMAC_UL_TBF) ? "DL" : "UL"); talloc_free(tbf); diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index e76ea8c2..0330a785 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -180,7 +180,12 @@ struct gprs_rlcmac_dl_tbf *tbf_alloc_dl_tbf(struct gprs_rlcmac_bts *bts, GprsMs gprs_rlcmac_dl_tbf::~gprs_rlcmac_dl_tbf() { osmo_timer_del(&m_llc_timer); - /* ~gprs_rlcmac_dl_tbf() is called automatically upon return */ + if (is_egprs_enabled()) { + rate_ctr_group_free(m_dl_egprs_ctrs); + } else { + rate_ctr_group_free(m_dl_gprs_ctrs); + } + /* ~gprs_rlcmac_tbf() is called automatically upon return */ } gprs_rlcmac_dl_tbf::gprs_rlcmac_dl_tbf(struct gprs_rlcmac_bts *bts_, GprsMs *ms) : diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp index d4575a36..6e507348 100644 --- a/src/tbf_ul.cpp +++ b/src/tbf_ul.cpp @@ -91,6 +91,13 @@ static const struct rate_ctr_group_desc tbf_ul_egprs_ctrg_desc = { tbf_ul_egprs_ctr_description, }; +gprs_rlcmac_ul_tbf::~gprs_rlcmac_ul_tbf() +{ + rate_ctr_group_free(m_ul_egprs_ctrs); + rate_ctr_group_free(m_ul_gprs_ctrs); + /* ~gprs_rlcmac_tbf() is called automatically upon return */ +} + static int ul_tbf_dtor(struct gprs_rlcmac_ul_tbf *tbf) { tbf->~gprs_rlcmac_ul_tbf(); diff --git a/src/tbf_ul.h b/src/tbf_ul.h index 9396633b..2bc908d9 100644 --- a/src/tbf_ul.h +++ b/src/tbf_ul.h @@ -54,6 +54,7 @@ enum tbf_egprs_ul_counters { struct gprs_rlcmac_ul_tbf : public gprs_rlcmac_tbf { gprs_rlcmac_ul_tbf(struct gprs_rlcmac_bts *bts, GprsMs *ms); + ~gprs_rlcmac_ul_tbf(); gprs_rlc_window *window(); struct msgb *create_ul_ack(uint32_t fn, uint8_t ts); bool ctrl_ack_to_toggle(); |