net.http.server: Use new util.cache to remember wildcard event handlers
authorMatthew Wild <mwild1@gmail.com>
Thu, 3 Dec 2015 14:54:29 +0000 (14:54 +0000)
committerMatthew Wild <mwild1@gmail.com>
Thu, 3 Dec 2015 14:54:29 +0000 (14:54 +0000)
net/http/server.lua

index ffcceabe68ee7e3b575ad1379f93c0ca4e99a107..acfb8a1d021609a407b51cae7d2cf1fa2f2f2139 100644 (file)
@@ -27,7 +27,10 @@ local function is_wildcard_match(wildcard_event, event)
        return wildcard_event:sub(1, -2) == event:sub(1, #wildcard_event-1);
 end
 
-local recent_wildcard_events, max_cached_wildcard_events = {}, 10000;
+local _handlers = events._handlers;
+local recent_wildcard_events = cache.new(10000, function (key, value)
+       rawset(_handlers, key, nil);
+end);
 
 local event_map = events._event_map;
 setmetatable(events._handlers, {
@@ -62,10 +65,7 @@ setmetatable(events._handlers, {
                end
                rawset(handlers, curr_event, handlers_array);
                if not event_map[curr_event] then -- Only wildcard handlers match, if any
-                       table.insert(recent_wildcard_events, curr_event);
-                       if #recent_wildcard_events > max_cached_wildcard_events then
-                               rawset(handlers, table.remove(recent_wildcard_events, 1), nil);
-                       end
+                       recent_wildcard_events:set(curr_event, true);
                end
                return handlers_array;
        end;