On Sat, 10 Sep 2005, Paolo 'Blaisorblade' Giarrusso wrote:>> When calling close() on the host, we must retry the operation when we get> EINTR.

Actually, no.

If close() return EINTR, the file descriptor _will_ have been closed. Theerror return just tells you that soem error happened on the file: forexample, in the case of EINTR, the close() may not have flushed all thepending data synchronously.

Re-doing the close() is the wrong thing to do, since in a threaded environment, something else might have opened another file, gotten the same file descriptor, and you now close _another_ file.

(Normally, re-doing the close will just return EBADF, of course).

I'm going to drop this patch, but in case you've ever seen a case where EINTR actually means that the fd didn't get closed, please holler, and we need to fix it.