diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2010-03-04 12:36:57 +0900 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2010-03-04 12:36:57 +0900 |
commit | 31c3a784533634e9ffc27152bb069c2a04c92bfe (patch) | |
tree | 8121180d4548b2efcb58034b78da01200c54cc04 /src | |
parent | Remove print debug (thanks evgeniy) (diff) |
improved s2s connections clean up (EJAB-1202)
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_s2s_out.erl | 54 |
1 files changed, 30 insertions, 24 deletions
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" -> |