From: Steven Barth Date: Tue, 2 Sep 2008 15:03:18 +0000 (+0000) Subject: Fixed occasionally occuring "Overload"-problems with luci-httpd X-Git-Tag: 0.8.0~185 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=95f9bb97ba1d247819e66bced6988ec39301d2e5 Fixed occasionally occuring "Overload"-problems with luci-httpd --- diff --git a/libs/httpd/luasrc/httpd/handler/luci.lua b/libs/httpd/luasrc/httpd/handler/luci.lua index 737abd479..c3720ff87 100644 --- a/libs/httpd/luasrc/httpd/handler/luci.lua +++ b/libs/httpd/luasrc/httpd/handler/luci.lua @@ -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