util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo...
authorMatthew Wild <mwild1@gmail.com>
Sun, 8 Jul 2012 17:47:05 +0000 (18:47 +0100)
committerMatthew Wild <mwild1@gmail.com>
Sun, 8 Jul 2012 17:47:05 +0000 (18:47 +0100)
util-src/pposix.c

index a5a89d55f3255102e19e720a91aeabd9ea589af4..8dfd6c75405be78ff14aee2a5eed11c11d4b5b30 100644 (file)
 #include "lua.h"
 #include "lauxlib.h"
 
+#if (defined(_SVID_SOURCE) && !defined(WITHOUT_MALLINFO))
+       #include <malloc.h>
+       #define WITH_MALLINFO
+#endif
+
 /* Daemonization support */
 
 static int lc_daemonize(lua_State *L)
@@ -612,6 +617,25 @@ int lc_setenv(lua_State* L)
        return 1;
 }
 
+#ifdef WITH_MALLINFO
+int lc_meminfo(lua_State* L)
+{
+       struct mallinfo info = mallinfo();
+       lua_newtable(L);
+       lua_pushinteger(L, info.arena);
+       lua_setfield(L, -2, "allocated");
+       lua_pushinteger(L, info.hblkhd);
+       lua_setfield(L, -2, "allocated_mmap");
+       lua_pushinteger(L, info.uordblks);
+       lua_setfield(L, -2, "used");
+       lua_pushinteger(L, info.fordblks);
+       lua_setfield(L, -2, "unused");
+       lua_pushinteger(L, info.keepcost);
+       lua_setfield(L, -2, "returnable");
+       return 1;
+}
+#endif
+
 /* Register functions */
 
 int luaopen_util_pposix(lua_State *L)
@@ -645,6 +669,10 @@ int luaopen_util_pposix(lua_State *L)
 
                { "setenv", lc_setenv },
 
+#ifdef WITH_MALLINFO
+               { "meminfo", lc_meminfo },
+#endif
+
                { NULL, NULL }
        };