mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
1. snax hotfix recursively patch func
2. load hotfix source with _ENV instead of empty table
This commit is contained in:
@@ -68,10 +68,10 @@ local function find_func(funcs, group , name)
|
||||
end
|
||||
|
||||
local dummy_env = {}
|
||||
for k,v in pairs(_ENV) do dummy_env[k] = v end
|
||||
|
||||
local function patch_func(funcs, global, group, name, f)
|
||||
local desc = assert(find_func(funcs, group, name) , string.format("Patch mismatch %s.%s", group, name))
|
||||
local i = 1
|
||||
local function _patch(global, f)
|
||||
local i = 1
|
||||
while true do
|
||||
local name, value = debug.getupvalue(f, i)
|
||||
if name == nil then
|
||||
@@ -81,9 +81,18 @@ local function patch_func(funcs, global, group, name, f)
|
||||
if old_uv then
|
||||
debug.upvaluejoin(f, i, old_uv.func, old_uv.index)
|
||||
end
|
||||
else
|
||||
if type(value) == "function" then
|
||||
_patch(global, value)
|
||||
end
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
|
||||
local function patch_func(funcs, global, group, name, f)
|
||||
local desc = assert(find_func(funcs, group, name) , string.format("Patch mismatch %s.%s", group, name))
|
||||
_patch(global, f)
|
||||
desc[4] = f
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user