libs/core: util.lua optimize get() and set() accessors of threadlocals
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 23 Jul 2009 03:21:18 +0000 (03:21 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 23 Jul 2009 03:21:18 +0000 (03:21 +0000)
libs/core/luasrc/util.lua

index f83cac5763369f85e2461139cf3799a426cd6ebe..94b5ce67f10343c3ebd9321edca592074906a71f 100644 (file)
@@ -122,21 +122,17 @@ function threadlocal()
        local tbl = {}
 
        local function get(self, key)
-               local c = coroutine.running()
-               local thread = coxpt[c] or c or 0
-               if not rawget(self, thread) then
-                       return nil
-               end
-               return rawget(self, thread)[key]
+               local t = rawget(self, coxpt[coroutine.running()] or coroutine.running() or 0)
+               return t and t[key]
        end
 
        local function set(self, key, value)
-               local c = coroutine.running()
-               local thread = coxpt[c] or c or 0
-               if not rawget(self, thread) then
-                       rawset(self, thread, {})
+               local c = coxpt[coroutine.running()] or coroutine.running() or 0
+               if not rawget(self, c) then
+                       rawset(self, c, { [key] = value })
+               else
+                       rawget(self, c)[key] = value
                end
-               rawget(self, thread)[key] = value
        end
 
        setmetatable(tbl, {__index = get, __newindex = set, __mode = "k"})