diff options
author | Raimo Niskanen <[email protected]> | 2013-05-27 10:22:14 +0200 |
---|---|---|
committer | Raimo Niskanen <[email protected]> | 2013-05-27 10:31:20 +0200 |
commit | 1b5d887a79f31031caf3fc9f0b282b2d1ce71ce9 (patch) | |
tree | afd9aee2ea0c14532e1e82927b55e109f34418aa /erts | |
parent | db674e658b124c1f7c5d504c978eb6f757999527 (diff) | |
parent | 58de241d5d8e4b0536389b317ecc6e7a2a570997 (diff) | |
download | otp-1b5d887a79f31031caf3fc9f0b282b2d1ce71ce9.tar.gz otp-1b5d887a79f31031caf3fc9f0b282b2d1ce71ce9.tar.bz2 otp-1b5d887a79f31031caf3fc9f0b282b2d1ce71ce9.zip |
Merge branch 'maint'
Conflicts:
erts/preloaded/ebin/prim_inet.beam
Diffstat (limited to 'erts')
-rw-r--r-- | erts/preloaded/ebin/prim_inet.beam | bin | 70072 -> 70216 bytes | |||
-rw-r--r-- | erts/preloaded/src/prim_inet.erl | 23 |
2 files changed, 14 insertions, 9 deletions
diff --git a/erts/preloaded/ebin/prim_inet.beam b/erts/preloaded/ebin/prim_inet.beam Binary files differindex a02ff113b8..2db6a58d34 100644 --- a/erts/preloaded/ebin/prim_inet.beam +++ b/erts/preloaded/ebin/prim_inet.beam diff --git a/erts/preloaded/src/prim_inet.erl b/erts/preloaded/src/prim_inet.erl index d0e70aa95c..36a650cb5c 100644 --- a/erts/preloaded/src/prim_inet.erl +++ b/erts/preloaded/src/prim_inet.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2000-2012. All Rights Reserved. +%% Copyright Ericsson AB 2000-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -151,30 +151,35 @@ shutdown_pend_loop(S, N0) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close(S) when is_port(S) -> - unlink(S), %% avoid getting {'EXIT', S, Reason} case subscribe(S, [subs_empty_out_q]) of {ok, [{subs_empty_out_q,N}]} when N > 0 -> close_pend_loop(S, N); %% wait for pending output to be sent _ -> - catch erlang:port_close(S), - ok + close_port(S) end. close_pend_loop(S, N) -> receive {empty_out_q,S} -> - catch erlang:port_close(S), ok + close_port(S) after ?INET_CLOSE_TIMEOUT -> case getstat(S, [send_pend]) of {ok, [{send_pend,N1}]} -> - if N1 =:= N -> catch erlang:port_close(S), ok; - true -> close_pend_loop(S, N1) + if + N1 =:= N -> + close_port(S); + true -> + close_pend_loop(S, N1) end; _ -> - catch erlang:port_close(S), ok + close_port(S) end end. - + +close_port(S) -> + catch erlang:port_close(S), + receive {'EXIT',S,_} -> ok after 0 -> ok end. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% BIND(insock(), IP, Port) -> {ok, integer()} | {error, Reason} |