Messages in this thread |  | | Date | Sun, 15 May 2011 16:40:17 +0200 | | From | Jan Kratochvil <> | | Subject | waitpid(WNOHANG) should report SIGCHLD-notified signals [Re: [PATCH 09/11] job control: reorganize wait_task_stopped()] |
| |
On Thu, 12 May 2011 19:32:28 +0200, Tejun Heo wrote: [...] > while (1) { > siginfo_t si = {}; > > waitid(P_PID, child, &si, > WSTOPPED | WCONTINUED | WNOWAIT | WNOHANG); > if (!si.si_pid) > break; > } > > kill(control, SIGKILL); > kill(child, SIGKILL); > return 0; > } > > waitid(2) should always succeed as it's never consuming wait state, > but it does, with or without the patch. All transitions need to be > made water tight to remove the bug.
It may be not related, I do not inderstand the kernel internals being discussed.
I was told by Roland McGrath that after SIGCHLD of a ptrace even from tracee invokes sighandler for that SIGCHLD in the tracer then waitpid(WNOHANG) still may return 0 as the signal is not yet ready. I was not able to reproduce it with a testcase myself.
But if it is a case it should be fixed as there is no later notification when to call waitpid(WNOHANG) again. And sure the debugger cannot busy-loop poll it.
Thanks, Jan
|  |