aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-04-05 18:48:11 +0200
committerpespin <pespin@sysmocom.de>2023-04-06 10:28:22 +0000
commit5b75e5dc8d81f467a1dfcb5a74a5f871ee69fa16 (patch)
tree334165c9bba045787f5e6894ab397b336907f6a5
parent9c4b472179715ba64e71fda8d76d774ee023c43e (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.c20
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);