aboutsummaryrefslogtreecommitdiffstats
path: root/src/gsm/lapd_core.c
diff options
context:
space:
mode:
authorJean-Francois Dionne <jf.dionne@nutaq.com>2017-03-06 14:33:20 -0500
committerHarald Welte <laforge@gnumonks.org>2017-03-29 13:40:34 +0000
commitd78c973cd89fc7c119573357cfbebb891dbc697a (patch)
treec6fb288956f3e6bca361bdd174feb21bef3be56b /src/gsm/lapd_core.c
parent7f9c7e7b8b194d9ebdd9de1fd8c0a5457b1e20e7 (diff)
Fix LAPD UA message buffer memory leak.
The state check in lapd_dl_reset causes some buffers never to be released. Using talloc report LAPD UA message buffers are never released after each call and cause a memory leak. Change-Id: I2799b70623f2ec4dbc725eb213e332e98da02a3e
Diffstat (limited to 'src/gsm/lapd_core.c')
-rw-r--r--src/gsm/lapd_core.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/gsm/lapd_core.c b/src/gsm/lapd_core.c
index 0cc28a6d..a602d788 100644
--- a/src/gsm/lapd_core.c
+++ b/src/gsm/lapd_core.c
@@ -308,11 +308,6 @@ void lapd_dl_init(struct lapd_datalink *dl, uint8_t k, uint8_t v_range,
/* reset to IDLE state */
void lapd_dl_reset(struct lapd_datalink *dl)
{
- if (dl->state == LAPD_STATE_IDLE)
- return;
- LOGP(DLLAPD, LOGL_INFO, "Resetting LAPDm instance (dl=%p)\n", dl);
- /* enter idle state (and remove eventual cont_res) */
- lapd_dl_newstate(dl, LAPD_STATE_IDLE);
/* flush buffer */
lapd_dl_flush_tx(dl);
lapd_dl_flush_send(dl);
@@ -322,6 +317,11 @@ void lapd_dl_reset(struct lapd_datalink *dl)
/* stop Timers */
lapd_stop_t200(dl);
lapd_stop_t203(dl);
+ if (dl->state == LAPD_STATE_IDLE)
+ return;
+ LOGP(DLLAPD, LOGL_INFO, "Resetting LAPDm instance (dl=%p)\n", dl);
+ /* enter idle state (and remove eventual cont_res) */
+ lapd_dl_newstate(dl, LAPD_STATE_IDLE);
}
/* reset and de-allocate history buffer */