Be sure to invoke *lws_free_header_table*:
* Just prior to freeing a session
* When allocating a new header table
This prevents some memory leaks we've found.
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index 2844cc6..2720160 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -295,6 +295,8 @@
wsi->user_space && !wsi->user_space_externally_allocated)
free(wsi->user_space);
+ /* As a precaution, free the header table in case it lingered: */
+ lws_free_header_table(wsi);
free(wsi);
}
diff --git a/lib/parsers.c b/lib/parsers.c
index 7dd24fe..195325b 100644
--- a/lib/parsers.c
+++ b/lib/parsers.c
@@ -61,6 +61,8 @@
int lws_allocate_header_table(struct libwebsocket *wsi)
{
+ /* Be sure to free any existing header data to avoid mem leak: */
+ lws_free_header_table(wsi);
wsi->u.hdr.ah = malloc(sizeof(*wsi->u.hdr.ah));
if (wsi->u.hdr.ah == NULL) {
lwsl_err("Out of memory\n");