gprs_pcu: Explicitly free all bts objects in list before freeing pcu

This is mostly important to unit tests, where the gprs_pcu object is
recreated several times (it is not recreated in normal operation).

The BTS objects are already being freed through talloc dependency tree.
However, since they may trigger counter updates, access to the pcu list,
etc, let's better do it explicitly before erasing gprs_pcu object
fields.

Related: OS#5555
Change-Id: If2a8360e214d993a8a89993532ff1099b30bdbb1
This commit is contained in:
Pau Espin 2022-05-09 15:44:32 +02:00
parent 9184e855a1
commit adcf27955d
1 changed files with 4 additions and 0 deletions

View File

@ -61,6 +61,10 @@ static void _update_stats_timer_cb(void *data)
static int gprs_pcu_talloc_destructor(struct gprs_pcu *pcu) static int gprs_pcu_talloc_destructor(struct gprs_pcu *pcu)
{ {
struct gprs_rlcmac_bts *bts;
while ((bts = llist_first_entry_or_null(&pcu->bts_list, struct gprs_rlcmac_bts, list)))
talloc_free(bts);
if (osmo_timer_pending(&pcu->update_stats_timer)) if (osmo_timer_pending(&pcu->update_stats_timer))
osmo_timer_del(&pcu->update_stats_timer); osmo_timer_del(&pcu->update_stats_timer);
neigh_cache_free(pcu->neigh_cache); neigh_cache_free(pcu->neigh_cache);