From abadd82c664c809eb727bcf9ae61f74c292996c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20R=C3=A9mond?= Date: Wed, 18 Jul 2007 16:26:50 +0000 Subject: * src/ejabberd_s2s_out.erl: Make s2s connections more robust * src/ejabberd_s2s.erl: Likewise SVN Revision: 817 --- src/ejabberd_s2s.erl | 19 ++++++++++++------- src/ejabberd_s2s_out.erl | 8 +++++++- 2 files changed, 19 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/ejabberd_s2s.erl b/src/ejabberd_s2s.erl index 76fc2d39f..2c73daa36 100644 --- a/src/ejabberd_s2s.erl +++ b/src/ejabberd_s2s.erl @@ -61,12 +61,17 @@ remove_connection(FromTo) -> mnesia:transaction(F). remove_connection(FromTo, Pid, Key) -> - F = fun() -> - mnesia:delete_object(#s2s{fromto = FromTo, - pid = Pid, - key = Key}) - end, - mnesia:transaction(F). + case catch mnesia:dirty_read(s2s, FromTo) of + [#s2s{pid = Pid, key = Key}] -> + F = fun() -> + mnesia:delete_object(#s2s{fromto = FromTo, + pid = Pid, + key = Key}) + end, + mnesia:transaction(F); + _ -> + ok + end. have_connection(FromTo) -> case catch mnesia:dirty_read(s2s, FromTo) of @@ -262,7 +267,7 @@ find_connection(From, To) -> {atomic, Pid} -> ejabberd_s2s_out:start_connection(Pid); _ -> - ok + ejabberd_s2s_out:stop_connection(Pid) end, TRes end; diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index 62a952e99..0effa91e3 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -13,7 +13,8 @@ %% External exports -export([start/3, start_link/3, - start_connection/1]). + start_connection/1, + stop_connection/1]). %% gen_fsm callbacks -export([init/1, @@ -89,6 +90,9 @@ start_link(From, Host, Type) -> start_connection(Pid) -> gen_fsm:send_event(Pid, init). +stop_connection(Pid) -> + gen_fsm:send_event(Pid, stop). + %%%---------------------------------------------------------------------- %%% Callback functions from gen_fsm %%%---------------------------------------------------------------------- @@ -175,6 +179,8 @@ open_socket(init, StateData) -> bounce_messages(Error), {stop, normal, StateData} end; +open_socket(stop, StateData) -> + {stop, normal, StateData}; open_socket(_, StateData) -> {next_state, open_socket, StateData}. -- cgit v1.2.3