diff options
author | Raimo Niskanen <[email protected]> | 2018-12-04 13:44:34 +0100 |
---|---|---|
committer | Raimo Niskanen <[email protected]> | 2018-12-04 13:44:34 +0100 |
commit | f37c8b37f49034fe10898ea47ed9c043ad2ba173 (patch) | |
tree | 53a2280057991312c5255c6c8540f44b39ebd156 /lib/ssl/src/tls_connection.erl | |
parent | 9ddbbb2b6a989e0199c7acba27e55044ecb975c8 (diff) | |
parent | 5d2e52ff81558471499986386d6018cdb4e8ccc8 (diff) | |
download | otp-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.erl | 18 |
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). |