diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-09-22 16:41:12 +0200 |
---|---|---|
committer | pespin <pespin@sysmocom.de> | 2021-09-23 11:09:15 +0000 |
commit | 192390c797bd82823636027df61c308dc4d1dcc0 (patch) | |
tree | 482e05dde182fdd8d9da29b3de4e0fd25bbbd488 | |
parent | ce9ec4963c963104d7872f389477ac7424ac313a (diff) |
trx_sched_clean_ts: Clean VAMOS shadow TS too
trx_sched_init_ts does it properly, but apparently it was forgotten to
do the same upon clean up.
Change-Id: Ice751870a46548af42b14846b8482335f636a84a
-rw-r--r-- | src/common/scheduler.c | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/src/common/scheduler.c b/src/common/scheduler.c index 6e1e4fb1..0826eda7 100644 --- a/src/common/scheduler.c +++ b/src/common/scheduler.c @@ -653,34 +653,43 @@ void trx_sched_init(struct gsm_bts_trx *trx) } } +static void trx_sched_clean_ts(struct gsm_bts_trx_ts *ts) +{ + struct l1sched_ts *l1ts = ts->priv; + unsigned int i; + + msgb_queue_flush(&l1ts->dl_prims); + rate_ctr_group_free(l1ts->ctrs); + l1ts->ctrs = NULL; + for (i = 0; i < _TRX_CHAN_MAX; i++) { + struct l1sched_chan_state *chan_state; + chan_state = &l1ts->chan_state[i]; + if (chan_state->dl_bursts) { + talloc_free(chan_state->dl_bursts); + chan_state->dl_bursts = NULL; + } + if (chan_state->ul_bursts) { + talloc_free(chan_state->ul_bursts); + chan_state->ul_bursts = NULL; + } + } + /* clear lchan channel states */ + for (i = 0; i < ARRAY_SIZE(ts->lchan); i++) + lchan_set_state(&ts->lchan[i], LCHAN_S_NONE); +} + void trx_sched_clean(struct gsm_bts_trx *trx) { - unsigned int tn, i; + unsigned int tn; LOGPTRX(trx, DL1C, LOGL_DEBUG, "Clean scheduler structures\n"); for (tn = 0; tn < ARRAY_SIZE(trx->ts); tn++) { struct gsm_bts_trx_ts *ts = &trx->ts[tn]; - struct l1sched_ts *l1ts = ts->priv; - - msgb_queue_flush(&l1ts->dl_prims); - rate_ctr_group_free(l1ts->ctrs); - l1ts->ctrs = NULL; - for (i = 0; i < _TRX_CHAN_MAX; i++) { - struct l1sched_chan_state *chan_state; - chan_state = &l1ts->chan_state[i]; - if (chan_state->dl_bursts) { - talloc_free(chan_state->dl_bursts); - chan_state->dl_bursts = NULL; - } - if (chan_state->ul_bursts) { - talloc_free(chan_state->ul_bursts); - chan_state->ul_bursts = NULL; - } - } - /* clear lchan channel states */ - for (i = 0; i < ARRAY_SIZE(ts->lchan); i++) - lchan_set_state(&ts->lchan[i], LCHAN_S_NONE); + + /* Clean primary and shadow timeslots */ + trx_sched_clean_ts(ts); + trx_sched_clean_ts(ts->vamos.peer); } } |