Software /
code /
prosody-modules
Comparison
mod_smacks/mod_smacks.lua @ 586:f733e7599ed6
mod_smacks: Add logging to hibernation and session destruction (thanks darkrain)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sun, 29 Jan 2012 20:34:14 +0000 |
parent | 576:44b69c3d5351 |
child | 587:322a14acd974 |
comparison
equal
deleted
inserted
replaced
585:ce2798a1bc56 | 586:f733e7599ed6 |
---|---|
179 module:log("warn", "::%s", tostring(queue[i])); | 179 module:log("warn", "::%s", tostring(queue[i])); |
180 end | 180 end |
181 handle_unacked_stanzas(session); | 181 handle_unacked_stanzas(session); |
182 end | 182 end |
183 else | 183 else |
184 session.log("debug", "mod_smacks hibernating session for up to %d seconds", resume_timeout); | |
184 local hibernate_time = os_time(); -- Track the time we went into hibernation | 185 local hibernate_time = os_time(); -- Track the time we went into hibernation |
185 session.hibernating = hibernate_time; | 186 session.hibernating = hibernate_time; |
186 local resumption_token = session.resumption_token; | 187 local resumption_token = session.resumption_token; |
187 timer.add_task(resume_timeout, function () | 188 timer.add_task(resume_timeout, function () |
189 session.log("debug", "mod_smacks hibernation timeout reached..."); | |
188 -- We need to check the current resumption token for this resource | 190 -- We need to check the current resumption token for this resource |
189 -- matches the smacks session this timer is for in case it changed | 191 -- matches the smacks session this timer is for in case it changed |
190 -- (for example, the client may have bound a new resource and | 192 -- (for example, the client may have bound a new resource and |
191 -- started a new smacks session, or not be using smacks) | 193 -- started a new smacks session, or not be using smacks) |
192 local curr_session = hosts[session.host].sessions[session.username].sessions[session.resource]; | 194 local curr_session = hosts[session.host].sessions[session.username].sessions[session.resource]; |
193 if curr_session.resumption_token == resumption_token | 195 if curr_session.resumption_token == resumption_token |
194 -- Check the hibernate time still matches what we think it is, | 196 -- Check the hibernate time still matches what we think it is, |
195 -- otherwise the session resumed and re-hibernated. | 197 -- otherwise the session resumed and re-hibernated. |
196 and session.hibernating == hibernate_time then | 198 and session.hibernating == hibernate_time then |
199 session.log("debug", "Destroying session for hibernating too long"); | |
197 session_registry[session.resumption_token] = nil; | 200 session_registry[session.resumption_token] = nil; |
198 session.resumption_token = nil; | 201 session.resumption_token = nil; |
199 -- This recursion back into our destroy handler is to | 202 -- This recursion back into our destroy handler is to |
200 -- make sure we still handle any queued stanzas | 203 -- make sure we still handle any queued stanzas |
201 sessionmanager.destroy_session(session); | 204 sessionmanager.destroy_session(session); |
205 else | |
206 session.log("debug", "Session resumed before hibernation timeout, all is well") | |
202 end | 207 end |
203 end); | 208 end); |
204 return; -- Postpone destruction for now | 209 return; -- Postpone destruction for now |
205 end | 210 end |
206 | 211 |