diff options
author | Raimo Niskanen <raimo@erlang.org> | 2019-09-09 13:52:05 +0200 |
---|---|---|
committer | Raimo Niskanen <raimo@erlang.org> | 2019-09-09 13:52:05 +0200 |
commit | 2aeb54060f0504d062724a16693d05b6579fdaaf (patch) | |
tree | d50d3e4b524499edf36ea4f813b67c88cd182a36 | |
parent | 57c57b46176b0bb726d9afef1a0bd483a3bbd19f (diff) | |
parent | 4909281d7ba01db12d04281d8b4679e35b6adf8c (diff) | |
download | erlang-2aeb54060f0504d062724a16693d05b6579fdaaf.tar.gz |
Merge branch 'maint'
* maint:
Make check of delay_send error more forgiving
-rw-r--r-- | lib/kernel/test/gen_tcp_misc_SUITE.erl | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/lib/kernel/test/gen_tcp_misc_SUITE.erl b/lib/kernel/test/gen_tcp_misc_SUITE.erl index de87bd9472..cd1bc2e0d1 100644 --- a/lib/kernel/test/gen_tcp_misc_SUITE.erl +++ b/lib/kernel/test/gen_tcp_misc_SUITE.erl @@ -3545,28 +3545,33 @@ wait(Mref) -> %% OTP-15536 %% Test that send error works correctly for delay_send delay_send_error(_Config) -> - {ok, LS} = gen_tcp:listen(0, [{reuseaddr, true}, {packet, 1}, {active, false}]), - {ok,{{0,0,0,0},PortNum}}=inet:sockname(LS), - P = spawn_link( - fun() -> - {ok, S} = gen_tcp:accept(LS), - receive die -> gen_tcp:close(S) end - end), - erlang:monitor(process, P), - {ok, S} = gen_tcp:connect("localhost", PortNum, - [{packet, 1}, {active, false}, {delay_send, true}]), - + {ok, L} = + gen_tcp:listen( + 0, [{reuseaddr, true}, {packet, 1}, {active, false}]), + {ok,{{0,0,0,0},PortNum}}=inet:sockname(L), + {ok, C} = + gen_tcp:connect( + "localhost", PortNum, + [{packet, 1}, {active, false}, {delay_send, true}]), + {ok, S} = gen_tcp:accept(L), %% Do a couple of sends first to see that it works - ok = gen_tcp:send(S, "hello"), - ok = gen_tcp:send(S, "hello"), - ok = gen_tcp:send(S, "hello"), - - %% Make the receiver close - P ! die, - receive _Down -> ok end, - - ok = gen_tcp:send(S, "hello"), - timer:sleep(500), %% Sleep in order for delay_send to have time to trigger - - %% This used to result in a double free - {error, closed} = gen_tcp:send(S, "hello"). + ok = gen_tcp:send(C, "hello"), + ok = gen_tcp:send(C, "hello"), + ok = gen_tcp:send(C, "hello"), + %% Close the receiver + ok = gen_tcp:close(S), + %% + case gen_tcp:send(C, "hello") of + ok -> + case gen_tcp:send(C, "hello") of + ok -> + timer:sleep(1000), %% Sleep in order for delay_send to have time to trigger + %% This used to result in a double free + {error, closed} = gen_tcp:send(C, "hello"); + {error, closed} -> + ok + end; + {error, closed} -> + ok + end, + ok = gen_tcp:close(C). |