libs/lucid: only execute handlers if daemon is below the thread limit, this allows...
[project/luci.git] / libs / lucid / luasrc / lucid.lua
index b10365579a043e75108700405be4141212d19d3d..4963ccc30485b424c014235f986a35b6e0cfb67e 100644 (file)
@@ -110,19 +110,22 @@ end
 -- This main function of LuCId will wait for events on given file descriptors.
 function run()
        local pollint = tonumber((cursor:get(UCINAME, "main", "pollinterval")))
+       local threadlimit = tonumber(cursor:get(UCINAME, "main", "threadlimit"))
 
        while true do
-               local stat, code = nixio.poll(pollt, pollint)
+               if not threadlimit or tcount < threadlimit then
+                       local stat, code = nixio.poll(pollt, pollint)
                
-               if stat and stat > 0 then
-                       for _, polle in ipairs(pollt) do
-                               if polle.revents ~= 0 and polle.handler then
-                                       polle.handler(polle)
+                       if stat and stat > 0 then
+                               for _, polle in ipairs(pollt) do
+                                       if polle.revents ~= 0 and polle.handler then
+                                               polle.handler(polle)
+                                       end
                                end
+                       elseif stat == 0 then
+                               ifaddrs = nixio.getifaddrs()
+                               collectgarbage("collect")
                        end
-               elseif stat == 0 then
-                       ifaddrs = nixio.getifaddrs()
-                       collectgarbage("collect")
                end
                
                for _, cb in ipairs(tickt) do
@@ -317,4 +320,4 @@ function daemonize()
        nixio.dup(devnull, nixio.stderr)
        
        return true
-end
\ No newline at end of file
+end