diff options
author | Kim Alvefur <zash@zash.se> | 2014-09-02 22:34:32 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2014-09-02 22:34:32 +0200 |
commit | d21a5e46225b9b62b78cd7eeee1ed6869ef9efa0 (patch) | |
tree | 5ae5bb832b9e41b4812e12421bb70daf1c3b7446 /net | |
parent | 6594e3042b1afd3ecf39c841c6e631fa57f1ad18 (diff) | |
parent | ab57f00b936342c599aadf901f85e5b29ee91baa (diff) | |
download | prosody-d21a5e46225b9b62b78cd7eeee1ed6869ef9efa0.tar.gz prosody-d21a5e46225b9b62b78cd7eeee1ed6869ef9efa0.zip |
Merge 0.10->trunk
Diffstat (limited to 'net')
-rw-r--r-- | net/http.lua | 4 | ||||
-rw-r--r-- | net/http/server.lua | 4 | ||||
-rw-r--r-- | net/server_event.lua | 11 | ||||
-rw-r--r-- | net/server_select.lua | 5 |
4 files changed, 21 insertions, 3 deletions
diff --git a/net/http.lua b/net/http.lua index b87c9396..35e02fdf 100644 --- a/net/http.lua +++ b/net/http.lua @@ -71,6 +71,10 @@ function listener.ondisconnect(conn, err) requests[conn] = nil; end +function listener.ondetach(conn) + requests[conn] = nil; +end + local function request_reader(request, data, err) if not request.parser then local function error_cb(reason) diff --git a/net/http/server.lua b/net/http/server.lua index 09f8d2a4..be870c51 100644 --- a/net/http/server.lua +++ b/net/http/server.lua @@ -142,6 +142,10 @@ function listener.ondisconnect(conn) sessions[conn] = nil; end +function listener.ondetach(conn) + sessions[conn] = nil; +end + function listener.onincoming(conn, data) sessions[conn]:feed(data); end diff --git a/net/server_event.lua b/net/server_event.lua index 52c1e9c1..480d876d 100644 --- a/net/server_event.lua +++ b/net/server_event.lua @@ -439,9 +439,11 @@ do end function interface_mt:setlistener(listener) - self.onconnect, self.ondisconnect, self.onincoming, self.ontimeout, self.onreadtimeout, self.onstatus - = listener.onconnect, listener.ondisconnect, listener.onincoming, - listener.ontimeout, listener.onreadtimeout, listener.onstatus; + self:ondetach(); -- Notify listener that it is no longer responsible for this connection + self.onconnect, self.ondisconnect, self.onincoming, self.ontimeout, + self.onreadtimeout, self.onstatus, self.ondetach + = listener.onconnect, listener.ondisconnect, listener.onincoming, listener.ontimeout, + listener.onreadtimeout, listener.onstatus, listener.ondetach; end -- Stub handlers @@ -461,6 +463,8 @@ do end function interface_mt:ondrain() end + function interface_mt:ondetach() + end function interface_mt:onstatus() end end @@ -488,6 +492,7 @@ do ontimeout = listener.ontimeout; -- called when fatal socket timeout occurs onreadtimeout = listener.onreadtimeout; -- called when socket inactivity timeout occurs ondrain = listener.ondrain; -- called when writebuffer is empty + ondetach = listener.ondetach; -- called when disassociating this listener from this connection onstatus = listener.onstatus; -- called for status changes (e.g. of SSL/TLS) eventread = false, eventwrite = false, eventclose = false, eventhandshake = false, eventstarthandshake = false; -- event handler diff --git a/net/server_select.lua b/net/server_select.lua index 06deec32..9b8e41d9 100644 --- a/net/server_select.lua +++ b/net/server_select.lua @@ -286,6 +286,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport local disconnect = listeners.ondisconnect local drain = listeners.ondrain local onreadtimeout = listeners.onreadtimeout; + local detach = listeners.ondetach local bufferqueue = { } -- buffer array local bufferqueuelen = 0 -- end of buffer array @@ -317,11 +318,15 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport handler.onreadtimeout = onreadtimeout; handler.setlistener = function( self, listeners ) + if detach then + detach(self) -- Notify listener that it is no longer responsible for this connection + end dispatch = listeners.onincoming disconnect = listeners.ondisconnect status = listeners.onstatus drain = listeners.ondrain handler.onreadtimeout = listeners.onreadtimeout + detach = listeners.ondetach end handler.getstats = function( ) return readtraffic, sendtraffic |