diff options
author | Hans Nilsson <[email protected]> | 2016-05-16 15:39:27 +0200 |
---|---|---|
committer | Hans Nilsson <[email protected]> | 2016-05-16 15:39:27 +0200 |
commit | 8f950e84bf6118211d0ead2fc8988d551b7ec174 (patch) | |
tree | 1db0ea95821e3ce7ffa70c07e24462f671fd6338 | |
parent | 2d1ba918ba32476564c4c92d527d6fbb57db9beb (diff) | |
parent | cf754c142b387855f1eb2ea87025efdbdb8e3f4a (diff) | |
download | otp-8f950e84bf6118211d0ead2fc8988d551b7ec174.tar.gz otp-8f950e84bf6118211d0ead2fc8988d551b7ec174.tar.bz2 otp-8f950e84bf6118211d0ead2fc8988d551b7ec174.zip |
Merge branch 'hairyhum/eldap/ignore_tcp_errors_at_close/PR-1048/OTP-13590'
* hairyhum/eldap/ignore_tcp_errors_at_close/PR-1048/OTP-13590:
indentation
Ignore tcp errors during close request to eldap
-rw-r--r-- | lib/eldap/src/eldap.erl | 7 | ||||
-rw-r--r-- | lib/eldap/test/eldap_basic_SUITE.erl | 27 |
2 files changed, 32 insertions, 2 deletions
diff --git a/lib/eldap/src/eldap.erl b/lib/eldap/src/eldap.erl index dc236f8a44..625309271b 100644 --- a/lib/eldap/src/eldap.erl +++ b/lib/eldap/src/eldap.erl @@ -564,7 +564,12 @@ loop(Cpid, Data) -> ?MODULE:loop(Cpid, NewData); {_From, close} -> - {no_reply,_NewData} = do_unbind(Data), + % Ignore tcp error if connection is already closed. + try do_unbind(Data) of + {no_reply,_NewData} -> ok + catch + throw:{gen_tcp_error, _TcpErr} -> ok + end, unlink(Cpid), exit(closed); diff --git a/lib/eldap/test/eldap_basic_SUITE.erl b/lib/eldap/test/eldap_basic_SUITE.erl index 9a23f74e22..536e891a1e 100644 --- a/lib/eldap/test/eldap_basic_SUITE.erl +++ b/lib/eldap/test/eldap_basic_SUITE.erl @@ -94,7 +94,8 @@ connection_tests() -> client_side_start_tls_timeout, client_side_bind_timeout, client_side_add_timeout, - client_side_search_timeout + client_side_search_timeout, + close_after_tcp_error ]. @@ -312,6 +313,30 @@ tcp_connection(Config) -> end. %%%---------------------------------------------------------------- + +close_after_tcp_error(Config) -> + Host = proplists:get_value(listen_host, Config), + Port = proplists:get_value(listen_port, Config), + Opts = proplists:get_value(tcp_connect_opts, Config), + T = 1000, + case eldap:open([Host], [{timeout,T},{port,Port}|Opts]) of + {ok,H} -> + Sl = proplists:get_value(listen_socket, Config), + gen_tcp:close(Sl), + {error,{gen_tcp_error,closed}} = eldap:simple_bind(H, anon, anon), + ok = eldap:close(H), + wait_for_close(H); + Other -> ct:fail("eldap:open failed: ~p",[Other]) + end. + +wait_for_close(H) -> + case erlang:is_process_alive(H) of + true -> timer:sleep(100), + wait_for_close(H); + false -> ok + end. + +%%%---------------------------------------------------------------- ssl_connection(Config) -> Host = proplists:get_value(listen_host, Config), Port = proplists:get_value(ssl_listen_port, Config), |