Merge with 0.5
authorMatthew Wild <mwild1@gmail.com>
Fri, 2 Oct 2009 20:24:16 +0000 (21:24 +0100)
committerMatthew Wild <mwild1@gmail.com>
Fri, 2 Oct 2009 20:24:16 +0000 (21:24 +0100)
net/server.lua
plugins/mod_bosh.lua

index 66272cccb252957ee2e74bf8a0750e3aa009cb54..eb032c17d907ea88029af53bff3a0e7e9d801ea7 100644 (file)
@@ -720,7 +720,7 @@ end
 removeserver = function( port )\r
     local handler = _server[ port ]\r
     if not handler then\r
-        return nil, "no server found on port '" .. tostring( port ) "'"\r
+        return nil, "no server found on port '" .. tostring( port ) .. "'"\r
     end\r
     handler.close( )\r
     _server[ port ] = nil\r
index e310be28530833b8396dd29f4929c9b4213cc7bf..0dd4a192bfb266ead22fb21f10eab60a24b0270e 100644 (file)
@@ -258,6 +258,7 @@ function stream_callbacks.handlestanza(request, stanza)
        end
 end
 
+local dead_sessions = {};
 function on_timer()
        -- log("debug", "Checking for requests soon to timeout...");
        -- Identify requests timing out within the next few seconds
@@ -274,18 +275,26 @@ function on_timer()
        end
        
        now = now - 3;
+       local n_dead_sessions = 0;
        for session, inactive_since in pairs(inactive_sessions) do
                if session.bosh_max_inactive then
                        if now - inactive_since > session.bosh_max_inactive then
                                (session.log or log)("debug", "BOSH client inactive too long, destroying session at %d", now);
                                sessions[session.sid]  = nil;
                                inactive_sessions[session] = nil;
-                               sm_destroy_session(session, "BOSH client silent for over "..session.bosh_max_inactive.." seconds");
+                               n_dead_sessions = n_dead_sessions + 1;
+                               dead_sessions[n_dead_sessions] = session;
                        end
                else
                        inactive_sessions[session] = nil;
                end
        end
+
+       for i=1,n_dead_sessions do
+               local session = dead_sessions[i];
+               dead_sessions[i] = nil;
+               sm_destroy_session(session, "BOSH client silent for over "..session.bosh_max_inactive.." seconds");
+       end
 end
 
 local ports = module:get_option("bosh_ports") or { 5280 };