diff --git a/ChangeLog b/ChangeLog index 5347c5d5c..4759b99b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-07-15 Alexey Shchepin + + * src/ejabberd_s2s.erl: Added remove_connection/3 + * src/ejabberd_s2s_out.erl: Bugfix: remove only own s2s record + 2007-07-11 Alexey Shchepin * src/ejabberd_s2s_out.erl: Bounce packets after unregistering s2s diff --git a/src/ejabberd_s2s.erl b/src/ejabberd_s2s.erl index 97ef9556e..76fc2d39f 100644 --- a/src/ejabberd_s2s.erl +++ b/src/ejabberd_s2s.erl @@ -19,6 +19,7 @@ get_key/1, try_register/1, remove_connection/1, + remove_connection/3, dirty_get_connections/0, ctl_process/2 ]). @@ -59,6 +60,14 @@ remove_connection(FromTo) -> end, mnesia:transaction(F). +remove_connection(FromTo, Pid, Key) -> + F = fun() -> + mnesia:delete_object(#s2s{fromto = FromTo, + pid = Pid, + key = Key}) + end, + mnesia:transaction(F). + have_connection(FromTo) -> case catch mnesia:dirty_read(s2s, FromTo) of [_] -> diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index 2189a419d..e587bbf34 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -656,8 +656,8 @@ terminate(Reason, StateName, StateData) -> false -> ok; Key -> - ejabberd_s2s:remove_connection({StateData#state.myname, - StateData#state.server}) + ejabberd_s2s:remove_connection( + {StateData#state.myname, StateData#state.server}, self(), Key) end, bounce_queue(StateData#state.queue, ?ERR_REMOTE_SERVER_NOT_FOUND), case StateData#state.socket of