Re: [REGRESSION] Select hang with zero sized UDP packets
When select wakes up on a UDP socket, user is expecting to get data. Getting 0 from recvfrom() or whatever read function she uses, is a wrong attitude. I agree with David. The unit test that expects select to wake up is wrong and should be changed. -Original Message- From: David Miller Sent: Tuesday, August 23, 2016 9:25 PM To: labb...@redhat.com Cc: kuz...@ms2.inr.ac.ru ; jmor...@namei.org ; yoshf...@linux-ipv6.org ; ka...@trash.net ; samanthaku...@google.com ; will...@google.com ; net...@vger.kernel.org ; linux-kernel@vger.kernel.org Subject: Re: [REGRESSION] Select hang with zero sized UDP packets From: Laura AbbottDate: Tue, 23 Aug 2016 10:53:26 -0700 Fedora received a report[1] of a unit test failing on Ruby when using the 4.7 kernel. This was a test to send a zero sized UDP packet. With the 4.7 kernel, the test now timing out on a select instead of completing. The reduced ruby test is def test_udp_recvfrom_nonblock u1 = UDPSocket.new u2 = UDPSocket.new u1.bind("127.0.0.1", 0) u2.send("", 0, u1.getsockname) IO.select [u1] # test gets stuck here ensure u1.close if u1 u2.close if u2 end Well, if there is no data, should select really wake up? I think it's valid not to.
Re: [REGRESSION] Select hang with zero sized UDP packets
When select wakes up on a UDP socket, user is expecting to get data. Getting 0 from recvfrom() or whatever read function she uses, is a wrong attitude. I agree with David. The unit test that expects select to wake up is wrong and should be changed. -Original Message- From: David Miller Sent: Tuesday, August 23, 2016 9:25 PM To: labb...@redhat.com Cc: kuz...@ms2.inr.ac.ru ; jmor...@namei.org ; yoshf...@linux-ipv6.org ; ka...@trash.net ; samanthaku...@google.com ; will...@google.com ; net...@vger.kernel.org ; linux-kernel@vger.kernel.org Subject: Re: [REGRESSION] Select hang with zero sized UDP packets From: Laura Abbott Date: Tue, 23 Aug 2016 10:53:26 -0700 Fedora received a report[1] of a unit test failing on Ruby when using the 4.7 kernel. This was a test to send a zero sized UDP packet. With the 4.7 kernel, the test now timing out on a select instead of completing. The reduced ruby test is def test_udp_recvfrom_nonblock u1 = UDPSocket.new u2 = UDPSocket.new u1.bind("127.0.0.1", 0) u2.send("", 0, u1.getsockname) IO.select [u1] # test gets stuck here ensure u1.close if u1 u2.close if u2 end Well, if there is no data, should select really wake up? I think it's valid not to.