diff options
author | Kim Alvefur <zash@zash.se> | 2019-09-29 15:41:01 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2019-09-29 15:41:01 +0200 |
commit | 31ede02c28c4b837a6b9b4bb1e6dcafe51efb217 (patch) | |
tree | 37f1f06555a0279ae5e34c208af5e5e7344cb33c /net | |
parent | 4ab02db7350394798bc924f8eeb341677d3504aa (diff) | |
download | prosody-31ede02c28c4b837a6b9b4bb1e6dcafe51efb217.tar.gz prosody-31ede02c28c4b837a6b9b4bb1e6dcafe51efb217.zip |
net.server_epoll: Fix link function to not replace listeners
mod_proxy65 calls link twice, once for each direction. This would
overwrite the listeners with one that has the previous listeners as
metatable.__index, but none of the others.
This takes advantage of 94c584d67533 to improve this.
Diffstat (limited to 'net')
-rw-r--r-- | net/server_epoll.lua | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua index c2eb7b1c..d2964888 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -793,17 +793,13 @@ end; -- Dump all data from one connection into another local function link(from, to, read_size) from:debug("Linking to %s", to.id); - from.listeners = setmetatable({ - onincoming = function (_, data) - from:pause(); + function from:onincoming(data) + self:pause(); to:write(data); - end, - }, {__index=from.listeners}); - to.listeners = setmetatable({ - ondrain = function () + end + function to:ondrain() from:resume(); - end, - }, {__index=to.listeners}); + end from:set_mode(read_size); from:set(true, nil); to:set(nil, true); |