aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ssl/src/tls_connection.erl
diff options
context:
space:
mode:
authorRaimo Niskanen <[email protected]>2018-12-04 13:44:34 +0100
committerRaimo Niskanen <[email protected]>2018-12-04 13:44:34 +0100
commitf37c8b37f49034fe10898ea47ed9c043ad2ba173 (patch)
tree53a2280057991312c5255c6c8540f44b39ebd156 /lib/ssl/src/tls_connection.erl
parent9ddbbb2b6a989e0199c7acba27e55044ecb975c8 (diff)
parent5d2e52ff81558471499986386d6018cdb4e8ccc8 (diff)
downloadotp-f37c8b37f49034fe10898ea47ed9c043ad2ba173.tar.gz
otp-f37c8b37f49034fe10898ea47ed9c043ad2ba173.tar.bz2
otp-f37c8b37f49034fe10898ea47ed9c043ad2ba173.zip
Merge branch 'raimo/ssl/tls_dist-optimization' into maint
* raimo/ssl/tls_dist-optimization: Handle socket close in state downgrade Handle dead sender at terminate Handle tls_sender exit properly Optimize split_bin Improve dist send throughput
Diffstat (limited to 'lib/ssl/src/tls_connection.erl')
-rw-r--r--lib/ssl/src/tls_connection.erl18
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/ssl/src/tls_connection.erl b/lib/ssl/src/tls_connection.erl
index 61cd0f3182..0f986b5e21 100644
--- a/lib/ssl/src/tls_connection.erl
+++ b/lib/ssl/src/tls_connection.erl
@@ -365,13 +365,11 @@ send_alert_in_connection(#alert{description = ?CLOSE_NOTIFY} = Alert, State) ->
send_alert_in_connection(Alert,
#state{protocol_specific = #{sender := Sender}}) ->
tls_sender:send_alert(Sender, Alert).
-send_sync_alert(Alert, #state{protocol_specific = #{sender := Sender}}= State) ->
- tls_sender:send_and_ack_alert(Sender, Alert),
- receive
- {Sender, ack_alert} ->
- ok
- after ?DEFAULT_TIMEOUT ->
- %% Sender is blocked terminate anyway
+send_sync_alert(
+ Alert, #state{protocol_specific = #{sender := Sender}} = State) ->
+ try tls_sender:send_and_ack_alert(Sender, Alert)
+ catch
+ _:_ ->
throw({stop, {shutdown, own_alert}, State})
end.
@@ -635,6 +633,12 @@ downgrade(Type, Event, State) ->
callback_mode() ->
state_functions.
+
+terminate(
+ {shutdown, sender_died, Reason}, _StateName,
+ #state{socket = Socket, transport_cb = Transport} = State) ->
+ ssl_connection:handle_trusted_certs_db(State),
+ close(Reason, Socket, Transport, undefined, undefined);
terminate(Reason, StateName, State) ->
catch ssl_connection:terminate(Reason, StateName, State),
ensure_sender_terminate(Reason, State).