Mercurial > prosody-modules
comparison mod_smacks/mod_smacks.lua @ 478:db0f065c4e09
mod_smacks: Don't destroy a session that binds the same resource as a hibernating smacks session (thanks xnyhps for tracking down the problem, though I've used a different fix)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 19 Nov 2011 22:39:02 +0000 |
parents | 445178d15b51 |
children | 44b69c3d5351 |
comparison
equal
deleted
inserted
replaced
477:bbe4df968099 | 478:db0f065c4e09 |
---|---|
165 handle_unacked_stanzas(session); | 165 handle_unacked_stanzas(session); |
166 end | 166 end |
167 else | 167 else |
168 local hibernate_time = os_time(); -- Track the time we went into hibernation | 168 local hibernate_time = os_time(); -- Track the time we went into hibernation |
169 session.hibernating = hibernate_time; | 169 session.hibernating = hibernate_time; |
170 local resumption_token = session.resumption_token; | |
170 timer.add_task(resume_timeout, function () | 171 timer.add_task(resume_timeout, function () |
172 -- We need to check the current resumption token for this resource | |
173 -- matches the smacks session this timer is for in case it changed | |
174 -- (for example, the client may have bound a new resource and | |
175 -- started a new smacks session, or not be using smacks) | |
176 local curr_session = hosts[session.host].sessions[session.username].sessions[session.resource]; | |
177 if curr_session.resumption_token == resumption_token | |
171 -- Check the hibernate time still matches what we think it is, | 178 -- Check the hibernate time still matches what we think it is, |
172 -- otherwise the session resumed and re-hibernated. | 179 -- otherwise the session resumed and re-hibernated. |
173 if session.hibernating == hibernate_time then | 180 and session.hibernating == hibernate_time then |
174 session_registry[session.resumption_token] = nil; | 181 session_registry[session.resumption_token] = nil; |
175 session.resumption_token = nil; | 182 session.resumption_token = nil; |
176 -- This recursion back into our destroy handler is to | 183 -- This recursion back into our destroy handler is to |
177 -- make sure we still handle any queued stanzas | 184 -- make sure we still handle any queued stanzas |
178 sessionmanager.destroy_session(session); | 185 sessionmanager.destroy_session(session); |