aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bts-trx/trx_if.c
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-06-06 17:36:53 +0700
committerlaforge <laforge@osmocom.org>2020-06-07 18:59:06 +0000
commit79aec05c231907a08867d7cb1eeff42095b02ec4 (patch)
tree7ad212f1b69776f4ade89bad21c53687ee974b85 /src/osmo-bts-trx/trx_if.c
parent4977e135c886729835277780b30889ebec018ab2 (diff)
osmo-bts-trx/trx_if: fix memleak in trx_ctrl_cmd_cb()
If we do not enqueue a TRXC message, we should release memory. Change-Id: Ie2cdf547befbc0fafdb82b10b45ad85a9b188b88
Diffstat (limited to 'src/osmo-bts-trx/trx_if.c')
-rw-r--r--src/osmo-bts-trx/trx_if.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/osmo-bts-trx/trx_if.c b/src/osmo-bts-trx/trx_if.c
index f717a0cf..488aff6e 100644
--- a/src/osmo-bts-trx/trx_if.c
+++ b/src/osmo-bts-trx/trx_if.c
@@ -211,9 +211,6 @@ static int trx_ctrl_cmd_cb(struct trx_l1h *l1h, int critical, void *cb, const ch
struct trx_ctrl_msg *tcm;
struct trx_ctrl_msg *prev = NULL;
va_list ap;
- int pending;
-
- pending = !llist_empty(&l1h->trx_ctrl_list);
/* create message */
tcm = talloc_zero(tall_bts_ctx, struct trx_ctrl_msg);
@@ -236,18 +233,22 @@ static int trx_ctrl_cmd_cb(struct trx_l1h *l1h, int critical, void *cb, const ch
tcm->cb = cb;
/* Avoid adding consecutive duplicate messages, eg: two consecutive POWEROFF */
- if(pending)
+ if (!llist_empty(&l1h->trx_ctrl_list))
prev = llist_entry(l1h->trx_ctrl_list.prev, struct trx_ctrl_msg, list);
-
- if (!pending ||
- !(strcmp(tcm->cmd, prev->cmd) == 0 && strcmp(tcm->params, prev->params) == 0)) {
- LOGPPHI(l1h->phy_inst, DTRX, LOGL_INFO, "Enqueuing TRX control command 'CMD %s%s%s'\n",
- tcm->cmd, tcm->params_len ? " ":"", tcm->params);
- llist_add_tail(&tcm->list, &l1h->trx_ctrl_list);
+ if (prev != NULL && !strcmp(tcm->cmd, prev->cmd)
+ && !strcmp(tcm->params, prev->params)) {
+ LOGPPHI(l1h->phy_inst, DTRX, LOGL_DEBUG,
+ "Not sending duplicate command '%s'\n", tcm->cmd);
+ talloc_free(tcm);
+ return 0;
}
+ LOGPPHI(l1h->phy_inst, DTRX, LOGL_INFO, "Enqueuing TRX control command 'CMD %s%s%s'\n",
+ tcm->cmd, tcm->params_len ? " " : "", tcm->params);
+ llist_add_tail(&tcm->list, &l1h->trx_ctrl_list);
+
/* send message, if we didn't already have pending messages */
- if (!pending)
+ if (prev == NULL)
trx_ctrl_send(l1h);
return 0;