diff options
author | Matthew Wild <mwild1@gmail.com> | 2012-04-27 20:00:06 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2012-04-27 20:00:06 +0100 |
commit | 6cc3d15683c52470af224efe2c4d7e10bb137f81 (patch) | |
tree | 1fa1f5f7b8abb35a9c829ba629769a663e9384b1 /net/http | |
parent | ff9ffc23510278c9c7e7d04789a0d4e529211484 (diff) | |
download | prosody-6cc3d15683c52470af224efe2c4d7e10bb137f81.tar.gz prosody-6cc3d15683c52470af224efe2c4d7e10bb137f81.zip |
net.http.server: Correctly cache results of handler indexing, and also cache failures
Diffstat (limited to 'net/http')
-rw-r--r-- | net/http/server.lua | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/net/http/server.lua b/net/http/server.lua index d693fb52..00d98fcb 100644 --- a/net/http/server.lua +++ b/net/http/server.lua @@ -46,17 +46,20 @@ setmetatable(events._handlers, { end end end - if #handlers_array == 0 then return; end - table.sort(handlers_array, function(b, a) - local a_score, b_score = matching_handlers_set[a], matching_handlers_set[b]; - for i = 1, #a_score do - if a_score[i] ~= b_score[i] then -- If equal, compare next score value - return a_score[i] < b_score[i]; + if #handlers_array > 0 then + table.sort(handlers_array, function(b, a) + local a_score, b_score = matching_handlers_set[a], matching_handlers_set[b]; + for i = 1, #a_score do + if a_score[i] ~= b_score[i] then -- If equal, compare next score value + return a_score[i] < b_score[i]; + end end - end - return false; - end); - handlers[curr_event] = handlers_array; + return false; + end); + else + handlers_array = false; + end + rawset(handlers, curr_event, handlers_array); return handlers_array; end; __newindex = function (handlers, curr_event, handlers_array) @@ -69,6 +72,7 @@ setmetatable(events._handlers, { end end end + rawset(handlers, curr_event, handlers_array); end; }); |