aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-10-11 11:05:30 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2021-10-11 11:19:11 +0200
commit33b4b15f75bca787e917c227013e430668be351d (patch)
treec4c6e5e0fe90e93c39b82db1170c4aa0199fa1a5
parent8e7d00f1ce706b73d9ff339d96f22505aa12662b (diff)
Add new gsm_bts_trx_free_shadow_ts() function
Use it as a counterpart of gsm_bts_trx_init_shadow_ts() Change-Id: I38baa2b2cfcf6221325d45860b3c7dd53235b8ff
-rw-r--r--include/osmo-bts/bts_trx.h1
-rw-r--r--src/common/bts_trx.c14
-rw-r--r--src/common/scheduler.c6
3 files changed, 18 insertions, 3 deletions
diff --git a/include/osmo-bts/bts_trx.h b/include/osmo-bts/bts_trx.h
index e1959c86..c0dcb1ce 100644
--- a/include/osmo-bts/bts_trx.h
+++ b/include/osmo-bts/bts_trx.h
@@ -50,6 +50,7 @@ static inline struct gsm_bts_trx *gsm_bts_bb_trx_get_trx(struct gsm_bts_bb_trx *
struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts);
struct gsm_bts_trx *gsm_bts_trx_num(const struct gsm_bts *bts, int num);
void gsm_bts_trx_init_shadow_ts(struct gsm_bts_trx *trx);
+void gsm_bts_trx_free_shadow_ts(struct gsm_bts_trx *trx);
char *gsm_trx_name(const struct gsm_bts_trx *trx);
const char *gsm_trx_unit_id(struct gsm_bts_trx *trx);
diff --git a/src/common/bts_trx.c b/src/common/bts_trx.c
index 7ef5b52a..b16a31c4 100644
--- a/src/common/bts_trx.c
+++ b/src/common/bts_trx.c
@@ -112,6 +112,20 @@ void gsm_bts_trx_init_shadow_ts(struct gsm_bts_trx *trx)
}
}
+void gsm_bts_trx_free_shadow_ts(struct gsm_bts_trx *trx)
+{
+ unsigned int tn;
+
+ for (tn = 0; tn < ARRAY_SIZE(trx->ts); tn++) {
+ struct gsm_bts_trx_ts *shadow_ts = trx->ts[tn].vamos.peer;
+ if (!shadow_ts)
+ continue;
+
+ talloc_free(shadow_ts);
+ trx->ts[tn].vamos.peer = NULL;
+ }
+}
+
struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts)
{
struct gsm_bts_trx *trx = talloc_zero(bts, struct gsm_bts_trx);
diff --git a/src/common/scheduler.c b/src/common/scheduler.c
index 5118904f..2a729e47 100644
--- a/src/common/scheduler.c
+++ b/src/common/scheduler.c
@@ -694,10 +694,10 @@ void trx_sched_clean(struct gsm_bts_trx *trx)
/* Clean primary and shadow timeslots */
trx_sched_clean_ts(ts);
trx_sched_clean_ts(ts->vamos.peer);
-
- talloc_free(ts->vamos.peer);
- ts->vamos.peer = NULL;
}
+
+ /* Free previously allocated shadow timeslots */
+ gsm_bts_trx_free_shadow_ts(trx);
}
struct msgb *_sched_dequeue_prim(struct l1sched_ts *l1ts, const struct trx_dl_burst_req *br)