Add comment why `closeFd` doesn't have to retry on EINTR. Fixes #88
authorNiklas Hamb├╝chen <mail@nh2.me>
Mon, 26 Feb 2018 08:19:17 +0000 (09:19 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Mon, 26 Feb 2018 08:53:54 +0000 (09:53 +0100)
System/Posix/IO/Common.hsc

index 4191d5e..b658dbd 100644 (file)
@@ -221,6 +221,12 @@ foreign import capi unsafe "HsUnix.h open"
 
 closeFd :: Fd -> IO ()
 closeFd (Fd fd) = throwErrnoIfMinus1_ "closeFd" (c_close fd)
+-- Here we don't to retry on EINTR because according to
+--  http://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html
+-- "with errno set to [EINTR] [...] the state of fildes is unspecified"
+-- and on Linux, already the first close() removes the FD from the process's
+-- FD table so closing a second time is invalid
+-- (see http://man7.org/linux/man-pages/man2/close.2.html#NOTES).
 
 foreign import ccall unsafe "HsUnix.h close"
    c_close :: CInt -> IO CInt