aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/ash.c13
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);