Merge 0.9->0.10
[prosody.git] / net / server_select.lua
index 6308e62fa4485b623243ab6d29b24edfce3a831f..d2192f0abd827bea81de3746f06bde11d5b3ea30 100644 (file)
@@ -285,6 +285,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
@@ -316,11 +317,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