aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2019-09-29 15:41:01 +0200
committerKim Alvefur <zash@zash.se>2019-09-29 15:41:01 +0200
commit31ede02c28c4b837a6b9b4bb1e6dcafe51efb217 (patch)
tree37f1f06555a0279ae5e34c208af5e5e7344cb33c
parent4ab02db7350394798bc924f8eeb341677d3504aa (diff)
downloadprosody-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.
-rw-r--r--net/server_epoll.lua14
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);