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, 1, 1) != EAGAIN) {
- continue;
- }
select_callback(f, selop);
f->filp_pipe_select_ops &= ~selop;
* by killing its process family, but not commit suicide.
*/
#if defined(MAKE_NATIVE) || defined(HAVE_SETPGID)
-#if defined(SYSV) || defined(__minix)
+#if defined(SYSV)
/* XXX: dsl - I'm sure this should be setpgrp()... */
(void)setsid();
#else
if (nready > 0 && readyfd(&childExitJob)) {
char token = 0;
ssize_t count;
+#if defined(__minix)
+ /* Workaround: While the pipe is deemed ready to be read, it can still
+ * return EAGAIN in the read below. */
+ do {
+#endif /* defined(__minix) */
count = read(childExitJob.inPipe, &token, 1);
+#if defined(__minix)
+ } while(-1 == count && EAGAIN == errno);
+#endif /* defined(__minix) */
switch (count) {
case 0:
Punt("unexpected eof on token pipe");