From 09ee8ab4685761cf33ac4cbf37e171917565e000 Mon Sep 17 00:00:00 2001
From: Guus Sliepen <guus@meshlink.io>
Date: Mon, 19 Oct 2015 20:46:27 +0200
Subject: [PATCH] Fix a memory leak.

The receive buffer was never freed.
---
 utcp.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/utcp.c b/utcp.c
index 5ba4eaa..c93d4bb 100644
--- a/utcp.c
+++ b/utcp.c
@@ -273,6 +273,7 @@ static void free_connection(struct utcp_connection *c) {
 	memmove(cp, cp + 1, (utcp->nconnections - i - 1) * sizeof *cp);
 	utcp->nconnections--;
 
+	buffer_exit(&c->rcvbuf);
 	buffer_exit(&c->sndbuf);
 	free(c);
 }
@@ -318,6 +319,7 @@ static struct utcp_connection *allocate_connection(struct utcp *utcp, uint16_t s
 	}
 
 	if(!buffer_init(&c->rcvbuf, DEFAULT_RCVBUFSIZE, DEFAULT_MAXRCVBUFSIZE)) {
+		buffer_exit(&c->sndbuf);
 		free(c);
 		return NULL;
 	}
@@ -1416,6 +1418,7 @@ void utcp_exit(struct utcp *utcp) {
 	for(int i = 0; i < utcp->nconnections; i++) {
 		if(!utcp->connections[i]->reapable)
 			debug("Warning, freeing unclosed connection %p\n", utcp->connections[i]);
+		buffer_exit(&utcp->connections[i]->rcvbuf);
 		buffer_exit(&utcp->connections[i]->sndbuf);
 		free(utcp->connections[i]);
 	}
-- 
2.39.5