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:
parent
3f38115c7b
commit
013226c417
1 changed files with 9 additions and 0 deletions
|
@ -392,7 +392,16 @@ int count; /* max number of processes to release */
|
||||||
if (f->filp_count < 1 || !(f->filp_pipe_select_ops & selop) ||
|
if (f->filp_count < 1 || !(f->filp_pipe_select_ops & selop) ||
|
||||||
f->filp_vno != vp)
|
f->filp_vno != vp)
|
||||||
continue;
|
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);
|
select_callback(f, selop);
|
||||||
|
|
||||||
f->filp_pipe_select_ops &= ~selop;
|
f->filp_pipe_select_ops &= ~selop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue