File 0535-Write-test-case.patch of Package erlang

From cf78d19b0c213a329a00612d1d12feeda099a7bf Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Tue, 11 Feb 2020 17:01:57 +0100
Subject: [PATCH 2/2] Write test case

---
 lib/kernel/test/gen_udp_SUITE.erl | 29 ++++++++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)

diff --git a/lib/kernel/test/gen_udp_SUITE.erl b/lib/kernel/test/gen_udp_SUITE.erl
index 70d8caf478..2720d3cc77 100644
--- a/lib/kernel/test/gen_udp_SUITE.erl
+++ b/lib/kernel/test/gen_udp_SUITE.erl
@@ -36,7 +36,8 @@
 
 -export([send_to_closed/1, active_n/1,
 	 buffer_size/1, binary_passive_recv/1, bad_address/1,
-	 read_packets/1, open_fd/1, connect/1, implicit_inet6/1]).
+	 read_packets/1, recv_poll_after_active_once/1,
+         open_fd/1, connect/1, implicit_inet6/1]).
 
 suite() -> [{ct_hooks,[ts_install_cth]}].
 
@@ -42,7 +43,8 @@ suite() ->
 
 all() -> 
     [send_to_closed, buffer_size, binary_passive_recv,
-     bad_address, read_packets, open_fd, connect,
+     bad_address, read_packets, recv_poll_after_active_once,
+     open_fd, connect,
      implicit_inet6, active_n].
 
 groups() -> 
@@ -437,6 +439,27 @@ flush() ->
     end.
 
 
+%% OTP-16059
+%% UDP recv with timeout 0 corrupts internal state so that after a
+%% recv under {active, once} the UDP recv poll wastes incoming data
+recv_poll_after_active_once(Config) when is_list(Config) ->
+    Msg1 = <<"Hej!">>,
+    Msg2 = <<"Hej igen!">>,
+    Addr = {127,0,0,1},
+    {ok,S1} = gen_udp:open(0, [binary, {active, once}]),
+    {ok,P1} = inet:port(S1),
+    {ok,S2} = gen_udp:open(0, [binary, {active, false}]),
+    {ok,P2} = inet:port(S2),
+    ok = gen_udp:send(S2, Addr, P1, Msg1),
+    receive
+        {udp, S1, Addr, P2, Msg1} ->
+            {error, timeout} = gen_udp:recv(S1, 0, 0),
+            ok = gen_udp:send(S2, Addr, P1, Msg2),
+            receive after 500 -> ok end, % Give the kernel time to deliver
+            {ok, {Addr, P2, Msg2}} = gen_udp:recv(S1, 0, 0),
+            ok
+    end.
+
 
 open_fd(suite) ->
     [];
-- 
2.16.4

openSUSE Build Service is sponsored by