Changeset 3224 in kBuild
- Timestamp:
- Apr 8, 2018 3:49:07 PM (7 years ago)
- Location:
- trunk/src/kmk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/kmkbuiltin.h
r3195 r3224 150 150 #ifdef KBUILD_OS_WINDOWS 151 151 extern int kmk_builtin_kSubmit(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx, struct child *pChild, pid_t *pPidSpawned); 152 extern int kSubmitSubProcGetResult(intptr_t pvUser, int *prcExit, int *piSigNo);152 extern int kSubmitSubProcGetResult(intptr_t pvUser, int fBlock, int *prcExit, int *piSigNo); 153 153 extern int kSubmitSubProcKill(intptr_t pvUser, int iSignal); 154 154 extern void kSubmitSubProcCleanup(intptr_t pvUser); -
trunk/src/kmk/kmkbuiltin/kSubmit.c
r3200 r3224 1196 1196 * @returns 0 on success, -1 if ReadFile was restarted. 1197 1197 * @param pvUser The worker instance. 1198 * @param fBlock if we're to block waiting for the result or not. 1198 1199 * @param prcExit Where to return the exit code. 1199 1200 * @param piSigNo Where to return the signal number. 1200 1201 */ 1201 int kSubmitSubProcGetResult(intptr_t pvUser, int *prcExit, int *piSigNo)1202 int kSubmitSubProcGetResult(intptr_t pvUser, int fBlock, int *prcExit, int *piSigNo) 1202 1203 { 1203 1204 PWORKERINSTANCE pWorker = (PWORKERINSTANCE)pvUser; … … 1210 1211 */ 1211 1212 DWORD cbRead = 0; 1212 if (GetOverlappedResult(pWorker->hPipe, &pWorker->OverlappedRead, &cbRead, TRUE))1213 if (GetOverlappedResult(pWorker->hPipe, &pWorker->OverlappedRead, &cbRead, fBlock ? TRUE : FALSE)) 1213 1214 { 1214 1215 pWorker->cbResultRead += cbRead; … … 1228 1229 { 1229 1230 DWORD dwErr = GetLastError(); 1231 if (dwErr == ERROR_IO_INCOMPLETE && !fBlock) 1232 return -1; 1230 1233 kSubmitWinReadFailed(pCtx, pWorker, dwErr, "kSubmitSubProcGetResult/result"); 1231 1234 } -
trunk/src/kmk/w32/winchildren.c
r3205 r3224 2334 2334 assert(pChild->u.Submit.pStdErr); 2335 2335 pChild->u.Submit.pStdOut->fHaveWrittenOut = FALSE; 2336 ahHandles[cHandles++] = pChild->u.Submit.pStdOut->h PipeMine;2336 ahHandles[cHandles++] = pChild->u.Submit.pStdOut->hEvent; 2337 2337 pChild->u.Submit.pStdErr->fHaveWrittenOut = FALSE; 2338 ahHandles[cHandles++] = pChild->u.Submit.pStdErr->h PipeMine;2338 ahHandles[cHandles++] = pChild->u.Submit.pStdErr->hEvent; 2339 2339 } 2340 2340 … … 2347 2347 int iSignal = -1; 2348 2348 DWORD dwStatus; 2349 if (cHandles == 0)2349 if (cHandles == 1) 2350 2350 dwStatus = WaitForSingleObject(ahHandles[0], INFINITE); 2351 2351 else … … 2358 2358 mkWinChildcareWorkerCatchOutput(pChild, pChild->u.Submit.pStdErr, FALSE /*fDraining*/); 2359 2359 } 2360 if (kSubmitSubProcGetResult((intptr_t)pvSubmitWorker, &iExitCode, &iSignal) == 0)2360 if (kSubmitSubProcGetResult((intptr_t)pvSubmitWorker, dwStatus == WAIT_OBJECT_0 /*fBlock*/, &iExitCode, &iSignal) == 0) 2361 2361 { 2362 2362 if (pChild->u.Submit.pStdOut)
Note:
See TracChangeset
for help on using the changeset viewer.