Fixed occasionally occuring "Overload"-problems with luci-httpd
authorSteven Barth <steven@midlink.org>
Tue, 2 Sep 2008 15:03:18 +0000 (15:03 +0000)
committerSteven Barth <steven@midlink.org>
Tue, 2 Sep 2008 15:03:18 +0000 (15:03 +0000)
libs/httpd/luasrc/httpd/handler/luci.lua

index 737abd479e3a8e382d6f5273f858a8e79463a953..c3720ff8711f19edab3bf691c504b34cd01908ce 100644 (file)
@@ -41,7 +41,15 @@ end
 
 function Luci.handle_get(self, request, sourcein, sinkerr)
        if self.limit and #self.running >= self.limit then
-               return self:failure(503, "Overload")
+               for k, v in ipairs(self.running) do
+                       if coroutine.status(v) == "dead" then
+                               collectgarbage()
+                               break
+                       end
+               end
+               if #self.running >= self.limit then     
+                       return self:failure(503, "Overload")
+               end
        end
        table.insert(self.running, coroutine.running())
        
@@ -84,6 +92,10 @@ function Luci.handle_get(self, request, sourcein, sinkerr)
                        return true
                elseif id == 5 then
                        active = false
+
+                       while (coroutine.resume(x)) do
+                       end
+
                        return nil
                elseif id == 4 then
                        return data