pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/38083?usp=email )
Change subject: bts: Remove from net->bts_list during talloc destructor ......................................................................
bts: Remove from net->bts_list during talloc destructor
This went unnoticed because so far there's not clear way to free a BTS, eg. through VTY.
Change-Id: I2bb1d51541c79e417c0359830e9f095be4669867 --- M src/osmo-bsc/bts.c M src/osmo-bsc/gsm_data.c M tests/acc/acc_test.c M tests/gsm0408/gsm0408_test.c M tests/paging/paging_test.c 5 files changed, 5 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/83/38083/1
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c index 0d33427..50a8579 100644 --- a/src/osmo-bsc/bts.c +++ b/src/osmo-bsc/bts.c @@ -158,6 +158,8 @@ { /* Entries in bts->loc_list are freed by talloc recursively, no need to free them here. */
+ llist_del(&bts->list); + paging_destructor(bts); bts_setup_ramp_remove(bts);
@@ -193,6 +195,9 @@
talloc_set_destructor(bts, gsm_bts_talloc_destructor);
+ llist_add_tail(&bts->list, &net->bts_list); + net->num_bts++; + bts->nr = bts_num; bts->num_trx = 0; INIT_LLIST_HEAD(&bts->trx_list); diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c index 87e3893..d5c74ad 100644 --- a/src/osmo-bsc/gsm_data.c +++ b/src/osmo-bsc/gsm_data.c @@ -96,14 +96,10 @@ return NULL; bts = bts_sm->bts[0];
- net->num_bts++; - bts->type = type; gsm_set_bts_model(bts, model); bts->bsic = bsic;
- llist_add_tail(&bts->list, &net->bts_list); - return bts; }
diff --git a/tests/acc/acc_test.c b/tests/acc/acc_test.c index 887e891..3dcdc1b 100644 --- a/tests/acc/acc_test.c +++ b/tests/acc/acc_test.c @@ -60,7 +60,6 @@ { osmo_timer_del(&bts->acc_mgr.rotate_timer); osmo_timer_del(&bts->acc_ramp.step_timer); - /* no need to llist_del(&bts->list), we never registered the bts there. */ talloc_free(bts->site_mgr); fprintf(stderr, "BTS deallocated OK in %s()\n", msg); } diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c index a39f8c2..b35df60 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -138,7 +138,6 @@ static inline void _bts_del(struct gsm_bts *bts, const char *msg) { osmo_timer_del(&bts->acc_mgr.rotate_timer); - /* no need to llist_del(&bts->list), we never registered the bts there. */ talloc_free(bts->site_mgr); printf("BTS deallocated OK in %s()\n", msg); } diff --git a/tests/paging/paging_test.c b/tests/paging/paging_test.c index 80aaee1..dae3499 100644 --- a/tests/paging/paging_test.c +++ b/tests/paging/paging_test.c @@ -97,7 +97,6 @@ #define bts_del(bts) _bts_del(bts, __func__) static inline void _bts_del(struct gsm_bts *bts, const char *msg) { - /* no need to llist_del(&bts->list), we never registered the bts there. */ talloc_free(bts->site_mgr); fprintf(stderr, "BTS deallocated OK in %s()\n", msg); }