summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--libs/core/luasrc/debug.lua27
-rw-r--r--libs/web/luasrc/dispatcher.lua3
2 files changed, 28 insertions, 2 deletions
diff --git a/libs/core/luasrc/debug.lua b/libs/core/luasrc/debug.lua
index a56400f34..f991ab8a6 100644
--- a/libs/core/luasrc/debug.lua
+++ b/libs/core/luasrc/debug.lua
@@ -1,2 +1,25 @@
-module("luci.debug", package.seeall)
-__file__ = debug.getinfo(1, 'S').source:sub(2) \ No newline at end of file
+local debug = require "debug"
+local io = require "io"
+local collectgarbage = collectgarbage
+
+module "luci.debug"
+__file__ = debug.getinfo(1, 'S').source:sub(2)
+
+-- Enables the memory tracer with given flags and returns a function to disable the tracer again
+function trap_memtrace(flags)
+ flags = flags or "l"
+ local tracefile = io.open("/tmp/memtrace", "w")
+
+ local function trap(what, line)
+ local info = debug.getinfo(2, "Sn")
+ tracefile:write(info.source..":"..line.."\t"..(info.namewhat or "").."\t"..(info.name or "").."\t"..collectgarbage("count").."\n")
+ end
+
+ debug.sethook(trap, flags)
+
+ return function()
+ debug.sethook()
+ tracefile:close()
+ end
+end
+
diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua
index fd2be1eb4..12093fe7a 100644
--- a/libs/web/luasrc/dispatcher.lua
+++ b/libs/web/luasrc/dispatcher.lua
@@ -112,11 +112,14 @@ function httpdispatch(request)
end
luci.http.close()
+
+ --context._disable_memtrace()
end
--- Dispatches a LuCI virtual path.
-- @param request Virtual path
function dispatch(request)
+ --context._disable_memtrace = require "luci.debug".trap_memtrace()
local ctx = context
ctx.path = request