# HG changeset patch # User Waqas Hussain # Date 1284678599 -18000 # Node ID a49ed9166820b185456bfc7f716f87070e0756ce # Parent 91c55ae31ef3256062f3752afcd8d11dfd2e7220 util.events: Create new index on handler change instead of modifying existing one (this makes util.events fully reentrant). diff -r 91c55ae31ef3 -r a49ed9166820 util/events.lua --- a/util/events.lua Fri Sep 17 04:09:58 2010 +0500 +++ b/util/events.lua Fri Sep 17 04:09:59 2010 +0500 @@ -18,14 +18,12 @@ local event_map = {}; local function _rebuild_index(event) -- TODO optimize index rebuilding local _handlers = event_map[event]; - local index = handlers[event]; - if index then - for i=#index,1,-1 do index[i] = nil; end - else index = {}; handlers[event] = index; end + local index = {}; for handler in pairs(_handlers) do t_insert(index, handler); end t_sort(index, function(a, b) return _handlers[a] > _handlers[b]; end); + handlers[event] = index; end; local function add_handler(event, handler, priority) local map = event_map[event];