. unpause() and revive() can race - revive() can run during
a device i/o unblock, causing two sendnb()s to occur, and the
2nd one to fail
. this can easily happen when a process is blocking on tty and
is then killed by a signal - tty cancels the i/o and then
kills the process by a signal
Change-Id: Ia319acaedfa336b78c030a2c4af7246959bdcf87
panic("VFS: unknown block reason: %d", blocked_on);
}
- rfp->fp_blocked_on = FP_BLOCKED_ON_NONE;
-
if ((blocked_on == FP_BLOCKED_ON_PIPE || blocked_on == FP_BLOCKED_ON_POPEN)&&
!wasreviving) {
susp_count--;
}
- replycode(proc_e, status); /* signal interrupted call */
+ if(rfp->fp_blocked_on != FP_BLOCKED_ON_NONE) {
+ rfp->fp_blocked_on = FP_BLOCKED_ON_NONE;
+ replycode(proc_e, status); /* signal interrupted call */
+ }
}