aboutsummaryrefslogtreecommitdiffstats
path: root/net/server_epoll.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2019-03-28 12:31:14 +0100
committerKim Alvefur <zash@zash.se>2019-03-28 12:31:14 +0100
commite34e8e845dec33f78f2c2173fcd5c22a5b433bfb (patch)
tree47d10effeee2971b76bd2e9004e6ebf659ac79bd /net/server_epoll.lua
parentb6cff0ba5e41f9be9232b37461df5ff11cacfa6e (diff)
downloadprosody-e34e8e845dec33f78f2c2173fcd5c22a5b433bfb.tar.gz
prosody-e34e8e845dec33f78f2c2173fcd5c22a5b433bfb.zip
net.server_epoll: Handle LuaSec wantread/wantwrite conditions before callbacks (fixes #1333)
This prevents the :set(true) call from resuming a connection that was paused in the onincoming callback.
Diffstat (limited to 'net/server_epoll.lua')
-rw-r--r--net/server_epoll.lua13
1 files changed, 8 insertions, 5 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua
index 5c65d227..cffd3a84 100644
--- a/net/server_epoll.lua
+++ b/net/server_epoll.lua
@@ -355,15 +355,18 @@ function interface:onreadable()
self:onconnect();
self:on("incoming", data);
else
- if partial and partial ~= "" then
- self:onconnect();
- self:on("incoming", partial, err);
- end
if err == "wantread" then
self:set(true, nil);
+ err = "timeout";
elseif err == "wantwrite" then
self:set(nil, true);
- elseif err ~= "timeout" then
+ err = "timeout";
+ end
+ if partial and partial ~= "" then
+ self:onconnect();
+ self:on("incoming", partial, err);
+ end
+ if err ~= "timeout" then
self:on("disconnect", err);
self:destroy()
return;