diff options
author | Ingela Anderton Andin <[email protected]> | 2016-12-19 11:19:09 +0100 |
---|---|---|
committer | Ingela Anderton Andin <[email protected]> | 2016-12-19 11:19:09 +0100 |
commit | b460143246eb207b505a554bf15d90655341dcbe (patch) | |
tree | e17579e3d8c8b1bdf11ff6bd377126d46ae78189 | |
parent | 8362491325db87bd7d561399f8ef8c849df22d33 (diff) | |
parent | 1715b9284643150da0f3ea43df42df1a4a90e144 (diff) | |
download | otp-b460143246eb207b505a554bf15d90655341dcbe.tar.gz otp-b460143246eb207b505a554bf15d90655341dcbe.tar.bz2 otp-b460143246eb207b505a554bf15d90655341dcbe.zip |
Merge branch 'maint'
-rw-r--r-- | lib/ssl/src/ssl_connection.erl | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl index 6e7c8c5ddd..6ed2fc83da 100644 --- a/lib/ssl/src/ssl_connection.erl +++ b/lib/ssl/src/ssl_connection.erl @@ -864,11 +864,11 @@ handle_call({close, {Pid, Timeout}}, From, StateName, State0, Connection) when i %% When downgrading an TLS connection to a transport connection %% we must recive the close alert from the peer before releasing the %% transport socket. - {next_state, downgrade, State, [{timeout, Timeout, downgrade}]}; + {next_state, downgrade, State#state{terminated = true}, [{timeout, Timeout, downgrade}]}; handle_call({close, _} = Close, From, StateName, State, Connection) -> %% Run terminate before returning so that the reuseaddr - %% inet-option - Result = Connection:terminate(Close, StateName, State), + %% inet-option works properly + Result = Connection:terminate(Close, StateName, State#state{terminated = true}), {stop_and_reply, {shutdown, normal}, {reply, From, Result}, State}; handle_call({shutdown, How0}, From, _, @@ -1010,7 +1010,10 @@ handle_info(Msg, StateName, #state{socket = Socket, error_tag = Tag} = State) -> terminate(_, _, #state{terminated = true}) -> %% Happens when user closes the connection using ssl:close/1 %% we want to guarantee that Transport:close has been called - %% when ssl:close/1 returns. + %% when ssl:close/1 returns unless it is a downgrade where + %% we want to guarantee that close alert is recived before + %% returning. In both cases terminate has been run manually + %% before run by gen_statem which will end up here ok; terminate({shutdown, transport_closed} = Reason, |