From 31c3a784533634e9ffc27152bb069c2a04c92bfe Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Thu, 4 Mar 2010 12:36:57 +0900 Subject: improved s2s connections clean up (EJAB-1202) --- src/ejabberd_s2s_out.erl | 54 +++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index 073c79962..ac7eee21d 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -952,30 +952,36 @@ send_db_request(StateData) -> Key -> Key end, - case New of - false -> - ok; - Key1 -> - send_element(StateData, - {xmlelement, - "db:result", - [{"from", StateData#state.myname}, - {"to", Server}], - [{xmlcdata, Key1}]}) - end, - case StateData#state.verify of - false -> - ok; - {_Pid, Key2, SID} -> - send_element(StateData, - {xmlelement, - "db:verify", - [{"from", StateData#state.myname}, - {"to", StateData#state.server}, - {"id", SID}], - [{xmlcdata, Key2}]}) - end, - {next_state, wait_for_validation, StateData#state{new = New}, ?FSMTIMEOUT*6}. + NewStateData = StateData#state{new = New}, + try + case New of + false -> + ok; + Key1 -> + send_element(StateData, + {xmlelement, + "db:result", + [{"from", StateData#state.myname}, + {"to", Server}], + [{xmlcdata, Key1}]}) + end, + case StateData#state.verify of + false -> + ok; + {_Pid, Key2, SID} -> + send_element(StateData, + {xmlelement, + "db:verify", + [{"from", StateData#state.myname}, + {"to", StateData#state.server}, + {"id", SID}], + [{xmlcdata, Key2}]}) + end, + {next_state, wait_for_validation, NewStateData, ?FSMTIMEOUT*6} + catch + _:_ -> + {stop, normal, NewStateData} + end. is_verify_res({xmlelement, Name, Attrs, _Els}) when Name == "db:result" -> -- cgit v1.2.3