Thanks David!

On 6/27/18 4:23 PM, David Lloyd wrote:
According to http://man7.org/linux/man-pages/man2/close.2.html it is currently platform-dependent whether close() must or must not (seems to be no middle ground) be retried. Might have to do some #ifdef guarding?

Right.

Here I'm patching only the Linux-specific file src/java.base/linux/native/libnet/linux_close.c
So no #ifdefs seem necessary.

MacOS variant also uses the same pattern, but I'm not touching it exactly because the behavior not quite clear on that platform.

On Solaris we already call close(fd) with no retrying.

With kind regards,
Ivan

--
- DML


On Jun 27, 2018, at 6:15 PM, Ivan Gerasimov <ivan.gerasi...@oracle.com <mailto:ivan.gerasi...@oracle.com>> wrote:

Hello!

When closing a socket via NET_SocketClose(int fd), a close(fd) is called.
The later is wrapped in a retry-loop, which is wrong because close() is not restartable.

The `man 2 close` states:
"""
... close() should not be retried after an EINTR since this may cause a reused descriptor from another thread to be closed.
"""

Would you please help review a trivial fix?

BUGURL: https://bugs.openjdk.java.net/browse/JDK-8205959
WEBREV: http://cr.openjdk.java.net/~igerasim/8205959/00/webrev/ <http://cr.openjdk.java.net/%7Eigerasim/8205959/00/webrev/>

Thanks in advance!

--
With kind regards,
Ivan Gerasimov


--
With kind regards,
Ivan Gerasimov

Reply via email to