bts: Remove acc timers during talloc destructor

This went unnoticed because so far there's not clear way to free a BTS,
eg. through VTY.

Change-Id: I0f94d8fc775953ee98eebc4d80f825404c4f92b2
This commit is contained in:
Pau Espin Pedrol
2024-09-10 18:45:18 +02:00
parent 9d2e4f5a0e
commit 6e306f47bc
5 changed files with 21 additions and 3 deletions

View File

@@ -53,6 +53,7 @@ struct acc_mgr {
};
void acc_mgr_init(struct acc_mgr *acc_mgr, struct gsm_bts *bts);
void acc_mgr_deinit(struct acc_mgr *acc_mgr);
uint8_t acc_mgr_get_len_allowed_adm(struct acc_mgr *acc_mgr);
uint8_t acc_mgr_get_len_allowed_ramp(struct acc_mgr *acc_mgr);
void acc_mgr_set_len_allowed_adm(struct acc_mgr *acc_mgr, uint8_t len_allowed_adm);
@@ -164,6 +165,7 @@ static inline unsigned int acc_ramp_is_running(struct acc_ramp *acc_ramp)
void acc_ramp_global_init(void);
void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts);
void acc_ramp_deinit(struct acc_ramp *acc_ramp);
int acc_ramp_set_step_size(struct acc_ramp *acc_ramp, unsigned int step_size);
int acc_ramp_set_step_interval(struct acc_ramp *acc_ramp, unsigned int step_interval);
int acc_ramp_set_chan_load_thresholds(struct acc_ramp *acc_ramp, unsigned int low_threshold, unsigned int up_threshold);

View File

@@ -296,6 +296,11 @@ void acc_mgr_init(struct acc_mgr *acc_mgr, struct gsm_bts *bts)
acc_mgr_gen_subset(acc_mgr, false);
}
void acc_mgr_deinit(struct acc_mgr *acc_mgr)
{
osmo_timer_del(&acc_mgr->rotate_timer);
}
uint8_t acc_mgr_get_len_allowed_adm(struct acc_mgr *acc_mgr)
{
return acc_mgr->len_allowed_adm;
@@ -474,6 +479,17 @@ void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts)
osmo_timer_setup(&acc_ramp->step_timer, do_acc_ramping_step, acc_ramp);
}
/*!
* Deinitialize an acc_ramp data structure.
* Called when the user is going to free the structure.
*
* \param[in] acc_ramp Pointer to acc_ramp structure to be deinitialized.
*/
void acc_ramp_deinit(struct acc_ramp *acc_ramp)
{
osmo_timer_del(&acc_ramp->step_timer);
}
/*!
* Change the ramping step size which controls how many ACCs will be allowed per ramping step.
* Returns negative on error (step_size out of range), else zero.

View File

@@ -163,6 +163,9 @@ static int gsm_bts_talloc_destructor(struct gsm_bts *bts)
paging_destructor(bts);
bts_setup_ramp_remove(bts);
acc_ramp_deinit(&bts->acc_ramp);
acc_mgr_deinit(&bts->acc_mgr);
osmo_timer_del(&bts->cbch_timer);
bts->site_mgr->bts[0] = NULL;

View File

@@ -58,8 +58,6 @@ static inline struct gsm_bts *_bts_init(struct gsm_network *net, const char *msg
#define bts_del(bts) _bts_del(bts, __func__)
static inline void _bts_del(struct gsm_bts *bts, const char *msg)
{
osmo_timer_del(&bts->acc_mgr.rotate_timer);
osmo_timer_del(&bts->acc_ramp.step_timer);
talloc_free(bts->site_mgr);
fprintf(stderr, "BTS deallocated OK in %s()\n", msg);
}

View File

@@ -137,7 +137,6 @@ static inline struct gsm_bts *_bts_init(struct gsm_network *net, const char *msg
#define bts_del(bts) _bts_del(bts, __func__)
static inline void _bts_del(struct gsm_bts *bts, const char *msg)
{
osmo_timer_del(&bts->acc_mgr.rotate_timer);
talloc_free(bts->site_mgr);
printf("BTS deallocated OK in %s()\n", msg);
}