aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/sysmo_sock.cpp12
-rw-r--r--src/tbf.cpp14
-rw-r--r--src/tbf.h4
3 files changed, 20 insertions, 10 deletions
diff --git a/src/sysmo_sock.cpp b/src/sysmo_sock.cpp
index d075df08..591c105f 100644
--- a/src/sysmo_sock.cpp
+++ b/src/sysmo_sock.cpp
@@ -82,8 +82,7 @@ static void pcu_sock_close(struct pcu_sock_state *state, int lost)
{
struct osmo_fd *bfd = &state->conn_bfd;
struct gprs_rlcmac_bts *bts = gprs_rlcmac_bts;
- struct gprs_rlcmac_tbf *tbf;
- uint8_t trx, ts, tfi;
+ uint8_t trx, ts;
LOGP(DL1IF, LOGL_NOTICE, "PCU socket has %s connection\n",
(lost) ? "LOST" : "closed");
@@ -108,14 +107,7 @@ static void pcu_sock_close(struct pcu_sock_state *state, int lost)
#endif
for (ts = 0; ts < 8; ts++)
bts->trx[trx].pdch[ts].enable = 0;
- for (tfi = 0; tfi < 32; tfi++) {
- tbf = bts->trx[trx].ul_tbf[tfi];
- if (tbf)
- tbf_free(tbf);
- tbf = bts->trx[trx].dl_tbf[tfi];
- if (tbf)
- tbf_free(tbf);
- }
+ gprs_rlcmac_tbf::free_all(&bts->trx[trx]);
}
gprs_bssgp_destroy_or_exit();
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 79f1ea82..8aff4633 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -237,3 +237,17 @@ struct gprs_rlcmac_tbf *tbf_alloc_ul(struct gprs_rlcmac_bts *bts,
return tbf;
}
+
+void gprs_rlcmac_tbf::free_all(struct gprs_rlcmac_trx *trx)
+{
+ for (uint8_t tfi = 0; tfi < 32; tfi++) {
+ struct gprs_rlcmac_tbf *tbf;
+
+ tbf = trx->ul_tbf[tfi];
+ if (tbf)
+ tbf_free(tbf);
+ tbf = trx->dl_tbf[tfi];
+ if (tbf)
+ tbf_free(tbf);
+ }
+}
diff --git a/src/tbf.h b/src/tbf.h
index cf2481de..b73d0b8f 100644
--- a/src/tbf.h
+++ b/src/tbf.h
@@ -87,6 +87,10 @@ extern struct llist_head gprs_rlcmac_sbas; /* list of single block allocs */
struct gprs_rlcmac_tbf {
+
+ static void free_all(struct gprs_rlcmac_trx *trx);
+
+
struct llist_head list;
enum gprs_rlcmac_tbf_state state;
uint32_t state_flags;