Please sign in to comment.
Handle potential race condition when stopping
The race conditionn is the following. When a FSEvent#stop is called, it kills the child process and closes the pipe. It can happen that the kill signal is sent and then succesfully the pipe is closed, before the child process dies and the pipe in the parent is closed. This means that IO::select() can raise a Errno::EBADF if the file descriptor is closed while waiting in select(). This additional rescue makes sure we shutdown in this case just like any others. This is a much more reliable solution than adding for example a sleep() between Process.kill and @pipe.close in FSEvent#stop. Found because of rubinius/rubinius#2102.
- Loading branch information...