diff options
Diffstat (limited to 'shell/ash.c')
| -rw-r--r-- | shell/ash.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c index a114fdbb0..72cdf5f59 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -4928,7 +4928,18 @@ waitpid_child(int *status, DWORD blocking) | |||
| 4928 | 4928 | ||
| 4929 | if (pid_nr) { | 4929 | if (pid_nr) { |
| 4930 | do { | 4930 | do { |
| 4931 | idx = WaitForMultipleObjects(pid_nr, proclist, FALSE, blocking); | 4931 | for (i = 0; i < pid_nr; i += MAXIMUM_WAIT_OBJECTS) { |
| 4932 | DWORD nr; | ||
| 4933 | TRACE(("poll many: i %d, pidnr: %d, maxwait: %d, blocking: %d\n", i, pid_nr, MAXIMUM_WAIT_OBJECTS, blocking)); | ||
| 4934 | nr = i + MAXIMUM_WAIT_OBJECTS > pid_nr ? | ||
| 4935 | (DWORD)(pid_nr - i) : MAXIMUM_WAIT_OBJECTS; | ||
| 4936 | idx = WaitForMultipleObjects(nr, proclist + i, FALSE, blocking); | ||
| 4937 | TRACE(("poll result: %d\n", idx)); | ||
| 4938 | if (idx != WAIT_TIMEOUT) { | ||
| 4939 | idx += i; | ||
| 4940 | break; | ||
| 4941 | } | ||
| 4942 | } | ||
| 4932 | if (idx < pid_nr) { | 4943 | if (idx < pid_nr) { |
| 4933 | GetExitCodeProcess(proclist[idx], &win_status); | 4944 | GetExitCodeProcess(proclist[idx], &win_status); |
| 4934 | *status = exit_code_to_wait_status(win_status); | 4945 | *status = exit_code_to_wait_status(win_status); |
