summaryrefslogtreecommitdiffhomepage
path: root/libs/httpd/luasrc
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-09-02 15:03:18 +0000
committerSteven Barth <steven@midlink.org>2008-09-02 15:03:18 +0000
commit95f9bb97ba1d247819e66bced6988ec39301d2e5 (patch)
treebb35e3ed01c90146e128338fefe7f0301a215bb7 /libs/httpd/luasrc
parent048fe5ce12c63c910cc92b568ec2fdca90c63d62 (diff)
Fixed occasionally occuring "Overload"-problems with luci-httpd
Diffstat (limited to 'libs/httpd/luasrc')
-rw-r--r--libs/httpd/luasrc/httpd/handler/luci.lua14
1 files changed, 13 insertions, 1 deletions
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