File 0720-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
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %% 
-%% Copyright Ericsson AB 1998-2019. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2020. All Rights Reserved.
 %% 
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -35,7 +35,8 @@
 
 -export([send_to_closed/1, active_n/1,
 	 buffer_size/1, binary_passive_recv/1, max_buffer_size/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,
          recvtos/1, recvtosttl/1, recvttl/1, recvtclass/1,
          sendtos/1, sendtosttl/1, sendttl/1, sendtclass/1,
 	 local_basic/1, local_unbound/1,
@@ -47,7 +48,8 @@ suite() ->
 
 all() -> 
     [send_to_closed, buffer_size, binary_passive_recv, max_buffer_size,
-     bad_address, read_packets, open_fd, connect,
+     bad_address, read_packets, recv_poll_after_active_once,
+     open_fd, connect,
      implicit_inet6, active_n,
      recvtos, recvtosttl, recvttl, recvtclass,
      sendtos, sendtosttl, sendttl, sendtclass,
@@ -436,6 +438,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.
+
 
 %% Test that the 'fd' option works.
 open_fd(Config) when is_list(Config) ->
-- 
2.16.4

openSUSE Build Service is sponsored by