From e2fa195e20be4a8ec9260f4bfda9a549cfb3e848 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Fri, 23 Jan 2009 07:28:49 +0000 Subject: [PATCH] * src/eldap/eldap.erl: Close a connection on tcp_error. SVN Revision: 1851 --- ChangeLog | 4 ++++ src/eldap/eldap.erl | 25 +++++++++++++------------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6d2f2b9a4..d62e1ad2f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2009-01-23 Evgeniy Khramtsov + + * src/eldap/eldap.erl: Close a connection on tcp_error. + 2009-01-23 Badlop * src/odbc/mysql.sql: Fix complain about comment syntax diff --git a/src/eldap/eldap.erl b/src/eldap/eldap.erl index 6384c87b7..799012fc5 100644 --- a/src/eldap/eldap.erl +++ b/src/eldap/eldap.erl @@ -517,22 +517,13 @@ handle_info({tcp, _Socket, Data}, StateName, S) handle_info({tcp_closed, _Socket}, Fsm_state, S) -> ?WARNING_MSG("LDAP server closed the connection: ~s:~p~nIn State: ~p", [S#eldap.host, S#eldap.port ,Fsm_state]), - F = fun(_Id, [{Timer, From, _Name}|_]) -> - gen_fsm:reply(From, {error, tcp_closed}), - cancel_timer(Timer) - end, - dict:map(F, S#eldap.dict), - {ok, NextState, NewS} = connect_bind(S#eldap{fd = null, - dict = dict:new(), - bind_q=queue:new()}), + {ok, NextState, NewS} = close_and_rebind(S, tcp_closed), {next_state, NextState, NewS}; handle_info({tcp_error, _Socket, Reason}, Fsm_state, S) -> ?DEBUG("eldap received tcp_error: ~p~nIn State: ~p", [Reason, Fsm_state]), - %% XXX wouldn't it be safer to try reconnect ? - %% if we were waiting a result, we may mait forever - %% cause request is probably lost.... - {next_state, Fsm_state, S}; + {ok, NextState, NewS} = close_and_rebind(S, tcp_error), + {next_state, NextState, NewS}; %% %% Timers @@ -1006,3 +997,13 @@ bump_id(#eldap{id = Id}) when Id > ?MAX_TRANSACTION_ID -> ?MIN_TRANSACTION_ID; bump_id(#eldap{id = Id}) -> Id + 1. + +close_and_rebind(State, Err) -> + F = fun(_Id, [{Timer, From, _Name}|_]) -> + gen_fsm:reply(From, {error, Err}), + cancel_timer(Timer) + end, + dict:map(F, State#eldap.dict), + connect_bind(State#eldap{fd = null, + dict = dict:new(), + bind_q=queue:new()}). -- 2.40.0