Re: [REGRESSION] Select hang with zero sized UDP packets

From: Dan Akunis
Date: Wed Aug 24 2016 - 04:31:34 EST


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: labbott@xxxxxxxxxx
Cc: kuznet@xxxxxxxxxxxxx ; jmorris@xxxxxxxxx ; yoshfuji@xxxxxxxxxxxxxx ; kaber@xxxxxxxxx ; samanthakumar@xxxxxxxxxx ; willemb@xxxxxxxxxx ; netdev@xxxxxxxxxxxxxxx ; linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [REGRESSION] Select hang with zero sized UDP packets

From: Laura Abbott <labbott@xxxxxxxxxx>
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.