diff options
author | Matthew Wild <mwild1@gmail.com> | 2012-07-08 18:47:05 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2012-07-08 18:47:05 +0100 |
commit | 364fd6915460a12a2fcdcee972da836ba0244e5a (patch) | |
tree | 6e8b01fd5fb4b815d1c395ad0f94a01d2ad1b451 /util-src/pposix.c | |
parent | 7180665b081fef6f162e5b06564ebf515d2515f7 (diff) | |
download | prosody-364fd6915460a12a2fcdcee972da836ba0244e5a.tar.gz prosody-364fd6915460a12a2fcdcee972da836ba0244e5a.zip |
util.pposix: Add meminfo() binding to memory allocation stats provided by mallinfo() [compilation tested on Ubuntu...]
Diffstat (limited to 'util-src/pposix.c')
-rw-r--r-- | util-src/pposix.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/util-src/pposix.c b/util-src/pposix.c index a5a89d55..8dfd6c75 100644 --- a/util-src/pposix.c +++ b/util-src/pposix.c @@ -34,6 +34,11 @@ #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 } }; |