diff options
author | Ingela Anderton Andin <[email protected]> | 2019-03-08 11:01:28 +0100 |
---|---|---|
committer | Ingela Anderton Andin <[email protected]> | 2019-03-08 11:01:28 +0100 |
commit | f7b6a48eafe54014490719679cbf802e9612984a (patch) | |
tree | 9740cffecc62bc63c96b717dc0c43939c3c26ae3 | |
parent | 0c9d6cb2ab23afb8e4bde0a3fa56fafb0d3a8a27 (diff) | |
parent | 80bc62dd5f8c80df5bbb30ac7a59cbb301cdb31e (diff) | |
download | otp-f7b6a48eafe54014490719679cbf802e9612984a.tar.gz otp-f7b6a48eafe54014490719679cbf802e9612984a.tar.bz2 otp-f7b6a48eafe54014490719679cbf802e9612984a.zip |
Merge branch 'maint'
-rw-r--r-- | lib/ftp/test/ftp_SUITE.erl | 38 | ||||
-rw-r--r-- | lib/ssl/src/ssl_connection.erl | 5 |
2 files changed, 28 insertions, 15 deletions
diff --git a/lib/ftp/test/ftp_SUITE.erl b/lib/ftp/test/ftp_SUITE.erl index 81147b5821..0b070ee8cb 100644 --- a/lib/ftp/test/ftp_SUITE.erl +++ b/lib/ftp/test/ftp_SUITE.erl @@ -96,6 +96,7 @@ ftp_tests()-> recv_chunk, recv_chunk_twice, recv_chunk_three_times, + recv_chunk_delay, type, quote, error_elogin, @@ -732,21 +733,28 @@ recv_chunk(Pid, Acc) -> Error end. -%% Make new test case that uses this or new code -%% only test one thing at the time -%% delay_recv_chunk(Pid) -> -%% delay_recv_chunk(Pid, <<>>). -%% delay_recv_chunk(Pid, Acc) -> -%% ct:pal("FOO ~p", [byte_size(Acc)]), -%% case ftp:recv_chunk(Pid) of -%% ok -> -%% {ok, Acc}; -%% {ok, Bin} -> -%% ct:sleep(100), -%% delay_recv_chunk(Pid, <<Acc/binary, Bin/binary>>); -%% Error -> -%% Error -%% end. +recv_chunk_delay(Config0) when is_list(Config0) -> + File1 = "big_file1.txt", + Contents = list_to_binary(lists:duplicate(1000, lists:seq(0,255))), + Config = set_state([reset, {mkfile,File1,Contents}], Config0), + Pid = proplists:get_value(ftp, Config), + ok = ftp:recv_chunk_start(Pid, id2ftp(File1,Config)), + {ok, ReceivedContents} = delay_recv_chunk(Pid), + find_diff(ReceivedContents, Contents). + +delay_recv_chunk(Pid) -> + delay_recv_chunk(Pid, <<>>). +delay_recv_chunk(Pid, Acc) -> + ct:pal("Recived size ~p", [byte_size(Acc)]), + case ftp:recv_chunk(Pid) of + ok -> + {ok, Acc}; + {ok, Bin} -> + ct:sleep(100), + delay_recv_chunk(Pid, <<Acc/binary, Bin/binary>>); + Error -> + Error + end. %%------------------------------------------------------------------------- type() -> diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl index 422c4c94ae..e5b01cce5f 100644 --- a/lib/ssl/src/ssl_connection.erl +++ b/lib/ssl/src/ssl_connection.erl @@ -2736,6 +2736,11 @@ ssl_options_list([Key | Keys], [Value | Values], Acc) -> handle_active_option(false, connection = StateName, To, Reply, State) -> hibernate_after(StateName, State, [{reply, To, Reply}]); +handle_active_option(_, connection = StateName, To, _Reply, #state{connection_env = #connection_env{terminated = true}, + user_data_buffer = {_,0,_}} = State) -> + handle_normal_shutdown(?ALERT_REC(?FATAL, ?CLOSE_NOTIFY, all_data_deliverd), StateName, + State#state{start_or_recv_from = To}), + {stop,{shutdown, peer_close}, State}; handle_active_option(_, connection = StateName0, To, Reply, #state{static_env = #static_env{protocol_cb = Connection}, user_data_buffer = {_,0,_}} = State0) -> case Connection:next_event(StateName0, no_record, State0) of |