diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2023-04-05 18:48:11 +0200 |
---|---|---|
committer | pespin <pespin@sysmocom.de> | 2023-04-06 10:28:22 +0000 |
commit | 5b75e5dc8d81f467a1dfcb5a74a5f871ee69fa16 (patch) | |
tree | 334165c9bba045787f5e6894ab397b336907f6a5 | |
parent | 9c4b472179715ba64e71fda8d76d774ee023c43e (diff) |
bts: Simplify lifecycle of BTS inside bts_list
Add the BTS object to the BTS list as the first thing after it is created,
this way it's always attached and hence simply always detach it during
object free.
Change-Id: Ica4fe2a4be0c85b10702011e978be03bf970b0c8
-rw-r--r-- | src/common/bts.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/common/bts.c b/src/common/bts.c index 23e4456f..af663115 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -226,6 +226,8 @@ static int gsm_bts_talloc_destructor(struct gsm_bts *bts) } bts_osmux_release(bts); + + llist_del(&bts->list); return 0; } @@ -240,6 +242,9 @@ struct gsm_bts *gsm_bts_alloc(void *ctx, uint8_t bts_num) talloc_set_destructor(bts, gsm_bts_talloc_destructor); + /* add to list of BTSs */ + llist_add_tail(&bts->list, &bts_gsmnet.bts_list); + bts->nr = bts_num; bts->num_trx = 0; INIT_LLIST_HEAD(&bts->trx_list); @@ -323,19 +328,14 @@ int bts_init(struct gsm_bts *bts) static int initialized = 0; void *tall_rtp_ctx; - /* add to list of BTSs */ - llist_add_tail(&bts->list, &bts_gsmnet.bts_list); - bts->band = GSM_BAND_1800; INIT_LLIST_HEAD(&bts->agch_queue.queue); bts->agch_queue.length = 0; bts->ctrs = rate_ctr_group_alloc(bts, &bts_ctrg_desc, bts->nr); - if (!bts->ctrs) { - llist_del(&bts->list); + if (!bts->ctrs) return -1; - } /* enable management with default levels, * raise threshold to GSM_BTS_AGCH_QUEUE_THRESH_LEVEL_DISABLE to @@ -394,10 +394,8 @@ int bts_init(struct gsm_bts *bts) /* Osmux */ rc = bts_osmux_init(bts); - if (rc < 0) { - llist_del(&bts->list); + if (rc < 0) return rc; - } /* features implemented in 'common', available for all models, * order alphabetically */ @@ -409,10 +407,8 @@ int bts_init(struct gsm_bts *bts) osmo_bts_set_feature(bts->features, BTS_FEAT_PAGING_COORDINATION); rc = bts_model_init(bts); - if (rc < 0) { - llist_del(&bts->list); + if (rc < 0) return rc; - } /* TRX0 was allocated early during gsm_bts_alloc, not later through VTY */ bts_model_trx_init(bts->c0); |