diff options
author | Kim Alvefur <zash@zash.se> | 2021-01-08 23:56:27 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2021-01-08 23:56:27 +0100 |
commit | 2f4d12286f17da4e0a1d6916e9c6addd5f61f9f5 (patch) | |
tree | ae3423f96ff891efa62da56d3223f2824ccffd2c /util | |
parent | cb1282bfd0959b52c0725e2249c07c9319b58da0 (diff) | |
parent | 365e5b0cb481315525d4f2bfbf478340b8dc08d8 (diff) | |
download | prosody-2f4d12286f17da4e0a1d6916e9c6addd5f61f9f5.tar.gz prosody-2f4d12286f17da4e0a1d6916e9c6addd5f61f9f5.zip |
Merge 0.11->trunk
Diffstat (limited to 'util')
-rw-r--r-- | util/stanza.lua | 4 | ||||
-rw-r--r-- | util/timer.lua | 15 |
2 files changed, 16 insertions, 3 deletions
diff --git a/util/stanza.lua b/util/stanza.lua index 85f047f8..3d4e9e5a 100644 --- a/util/stanza.lua +++ b/util/stanza.lua @@ -66,9 +66,9 @@ end local function check_text(text, text_type) if type(text) ~= "string" then error("invalid "..text_type.." value: expected string, got "..type(text)); - elseif not valid_xml_cdata(text) then + elseif not valid_xml_cdata(text, false) then error("invalid "..text_type.." value: contains control characters"); - elseif not valid_utf8(text, false) then + elseif not valid_utf8(text) then error("invalid "..text_type.." value: contains invalid utf8"); end end diff --git a/util/timer.lua b/util/timer.lua index cbfc1992..84da02cf 100644 --- a/util/timer.lua +++ b/util/timer.lua @@ -15,6 +15,7 @@ local debug_traceback = debug.traceback; local tostring = tostring; local xpcall = require "util.xpcall".xpcall; local math_max = math.max; +local pairs = pairs; if server.timer then -- The selected net.server implements this API, so defer to that @@ -34,6 +35,7 @@ local next_time = nil; local function _traceback_handler(err) log("error", "Traceback[timer]: %s", debug_traceback(tostring(err), 2)); end local function _on_timer(now) local peek; + local readd; while true do peek = h:peek(); if peek == nil or peek > now then break; end @@ -43,11 +45,22 @@ local function _on_timer(now) --item(now, id, _param); local success, err = xpcall(callback, _traceback_handler, now, id, param); if success and type(err) == "number" then - h:insert(callback, err + now, id); -- re-add + if readd then + readd[id] = { callback, err + now }; + else + readd = { [id] = { callback, err + now } }; + end params[id] = param; end end + if readd then + for id,timer in pairs(readd) do + h:insert(timer[1], timer[2], id); + end + peek = h:peek(); + end + if peek ~= nil and _active_timers > 1 and peek == next_time then -- Another instance of _on_timer already set next_time to the same value, -- so it should be safe to not renew this timer event |