# HG changeset patch # User Matthew Wild # Date 1353618147 0 # Node ID 9dca5bd5c2be6056aa2b365f3e5aab8754f1e922 # Parent a08b9448f277b62dba56a7b26099fb16cc0f2593# Parent 9ab06d0dbf6853650c99d97cd6da7f6352992bf2 Merge with a merge (or something) diff -r 9ab06d0dbf68 -r 9dca5bd5c2be core/modulemanager.lua --- a/core/modulemanager.lua Thu Nov 22 20:42:12 2012 +0100 +++ b/core/modulemanager.lua Thu Nov 22 21:02:27 2012 +0000 @@ -111,7 +111,7 @@ return true; end -local function do_load_module(host, module_name) +local function do_load_module(host, module_name, state) if not (host and module_name) then return nil, "insufficient-parameters"; elseif not hosts[host] and host ~= "*"then @@ -152,7 +152,8 @@ local _log = logger.init(host..":"..module_name); local api_instance = setmetatable({ name = module_name, host = host, - _log = _log, log = function (self, ...) return _log(...); end, event_handlers = new_multitable() } + _log = _log, log = function (self, ...) return _log(...); end, event_handlers = new_multitable(), + reloading = not not state, saved_state = state~=true and state or nil } , { __index = api }); local pluginenv = setmetatable({ module = api_instance }, { __index = _G }); @@ -176,6 +177,7 @@ log("warn", "Error loading module '%s' on '%s': %s", module_name, host, err or "nil"); end end + api_instance.reloading, api_instance.saved_state = nil, nil; if api_instance.host == "*" then if not api_instance.global then -- COMPAT w/pre-0.9 @@ -225,8 +227,9 @@ end end + mod.module.reloading = true; do_unload_module(host, name); - local ok, err = do_load_module(host, name); + local ok, err = do_load_module(host, name, saved or true); if ok then mod = get_module(host, name); if module_has_method(mod, "restore") then