bfree(&cmd);
}
+// closes the background job for bgwait1
+static void
+bgwaitclose(int i)
+{
+ if(i < 0 || i >= nbg)
+ return;
+
+ CloseHandle(bg[i].pi.hProcess);
+ CloseHandle(bg[i].pi.hThread);
+
+ bg[i] = bg[--nbg];
+}
+
// bgwait1 waits for a single background job
static void
bgwait1(void)
cmd = bg[i].cmd;
mode = bg[i].mode;
- if(!GetExitCodeProcess(bg[i].pi.hProcess, &code))
+ if(!GetExitCodeProcess(bg[i].pi.hProcess, &code)) {
+ bgwaitclose(i);
fatal("GetExitCodeProcess: %s", errstr());
- if(mode==CheckExit && code != 0)
+ return;
+ }
+
+ if(mode==CheckExit && code != 0) {
+ bgwaitclose(i);
fatal("FAILED: %s", cmd);
- CloseHandle(bg[i].pi.hProcess);
- CloseHandle(bg[i].pi.hThread);
+ return;
+ }
- bg[i] = bg[--nbg];
+ bgwaitclose(i);
}
void