+ if not (session and session.disconnect) then return; end
+ log("debug", "Destroying session...");
+ session.disconnect();
+ if session.username then
+ if session.resource then
+ hosts[session.host].sessions[session.username].sessions[session.resource] = nil;
+ end
+ local nomore = true;
+ for res, ssn in pairs(hosts[session.host].sessions[session.username]) do
+ nomore = false;
+ end
+ if nomore then
+ hosts[session.host].sessions[session.username] = nil;
+ end
+ end
+ session.conn = nil;
+ session.disconnect = nil;
+ for k in pairs(session) do
+ if k ~= "trace" then
+ session[k] = nil;
+ end
+ end
+ collectgarbage("collect");
+ collectgarbage("collect");
+ collectgarbage("collect");
+ collectgarbage("collect");
+ collectgarbage("collect");