Compiling HAProxy with USE_LUA=1 and running a configuration check within
valgrind with a very simple configuration such as:

    listen foo
        bind *:8080

Will report quite a few possible leaks afterwards:

    ==24048== LEAK SUMMARY:
    ==24048==    definitely lost: 0 bytes in 0 blocks
    ==24048==    indirectly lost: 0 bytes in 0 blocks
    ==24048==      possibly lost: 95,513 bytes in 1,209 blocks
    ==24048==    still reachable: 329,960 bytes in 71 blocks
    ==24048==         suppressed: 0 bytes in 0 blocks

Printing these possible leaks shows that all of them are caused by Lua.
Luckily Lua makes it *very* easy to free all used memory, so let's do
this on shutdown.

Afterwards this patch is applied the output looks much better:

    ==24199== LEAK SUMMARY:
    ==24199==    definitely lost: 0 bytes in 0 blocks
    ==24199==    indirectly lost: 0 bytes in 0 blocks
    ==24199==      possibly lost: 0 bytes in 0 blocks
    ==24199==    still reachable: 329,960 bytes in 71 blocks
    ==24199==         suppressed: 0 bytes in 0 blocks
---
 src/hlua.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/hlua.c b/src/hlua.c
index 18c830778..10d0b85c7 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -8617,6 +8617,13 @@ void hlua_init(void)
        RESET_SAFE_LJMP(gL.T);
 }
 
+static void hlua_deinit()
+{
+       lua_close(gL.T);
+}
+
+REGISTER_POST_DEINIT(hlua_deinit);
+
 static void hlua_register_build_options(void)
 {
        char *ptr = NULL;
-- 
2.27.0


Reply via email to