vfs: call pipe_check before reviving select()

. select callback on close() on a pipe
	  would falsely revive a read-select on
	  the pipe
	. the extra pipe_check catches it
	. fixes the new import of the netbsd
	  make in -j N mode (make jobs that communicate
	  with pipes)
This commit is contained in:
Ben Gras 2014-03-05 15:12:54 +01:00 committed by Lionel Sambuc
parent 3f38115c7b
commit 013226c417

View file

@ -392,7 +392,16 @@ int count; /* max number of processes to release */
if (f->filp_count < 1 || !(f->filp_pipe_select_ops & selop) ||
f->filp_vno != vp)
continue;
/* Do a pipe_check to see if we really want to callback this
* select; a close() doesn't always warrant it.
*/
if(pipe_check(f, op == VFS_READ ? READING : WRITING,
f->filp_flags & ~O_NONBLOCK, 1, 1) == SUSPEND) {
continue;
}
select_callback(f, selop);
f->filp_pipe_select_ops &= ~selop;
}
}