]> Zhao Yanbai Git Server - minix.git/commit
VFS: change select(2) semantics for closed filps 19/3419/1
authorDavid van Moolenbroek <david@minix3.org>
Thu, 2 Feb 2017 16:20:33 +0000 (16:20 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Thu, 9 Mar 2017 23:39:50 +0000 (23:39 +0000)
commit722cbc6186261c8af242e20abae1d1fd67d6e387
tree046b4da83b0e46b629282a956d8560770ebec5d3
parente3b8d4bb58a799dc7fd563ac39bf3015762af03b
VFS: change select(2) semantics for closed filps

If a select(2) call was issued on a file descriptor for which the file
pointer was closed due to invalidation (FILP_CLOSED), typically as the
result of a character/socket driver dying, the call would previously
return with an error: EINTR upon call entry or EIO on invalidation at
at a later time.  Especially the former could severely confuse
applications, which would assume the call was interrupted by a signal,
restart the select call and immediately get EINTR again, ad infinitum.

This patch changes the select(2) semantics such that for closed filps,
the file descriptor is returned as readable and/or writable (depending
on the requested operations), as such letting the entire select call
finish successfully.  Applications will then typically attempt to read
from and/or write to the file descriptor, resulting in an I/O error
that they should generally be better equipped to handle.

This patch also fixes a potential problem with returning early from a
select(2) call if a bad file descriptor is given: previously, in such
cases not all actions taken so far would be undone; now they are.

Change-Id: Ia6581f8789473a8a6c200852fccf552691a17025
minix/servers/vfs/select.c