diff options
Diffstat (limited to 'src/burn/engine/netfxchainer.cpp')
| -rw-r--r-- | src/burn/engine/netfxchainer.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/burn/engine/netfxchainer.cpp b/src/burn/engine/netfxchainer.cpp index 6f223eed..68ddb093 100644 --- a/src/burn/engine/netfxchainer.cpp +++ b/src/burn/engine/netfxchainer.cpp | |||
| @@ -338,7 +338,8 @@ extern "C" HRESULT NetFxRunChainer( | |||
| 338 | ) | 338 | ) |
| 339 | { | 339 | { |
| 340 | HRESULT hr = S_OK; | 340 | HRESULT hr = S_OK; |
| 341 | DWORD er = 0; | 341 | DWORD dwSignaledIndex = 0; |
| 342 | BOOL fTimedOut = 0; | ||
| 342 | WCHAR wzGuid[GUID_STRING_LENGTH]; | 343 | WCHAR wzGuid[GUID_STRING_LENGTH]; |
| 343 | LPWSTR sczEventName = NULL; | 344 | LPWSTR sczEventName = NULL; |
| 344 | LPWSTR sczSectionName = NULL; | 345 | LPWSTR sczSectionName = NULL; |
| @@ -381,9 +382,17 @@ extern "C" HRESULT NetFxRunChainer( | |||
| 381 | 382 | ||
| 382 | for (;;) | 383 | for (;;) |
| 383 | { | 384 | { |
| 384 | er = ::WaitForMultipleObjects(2, handles, FALSE, 100); | 385 | hr = AppWaitForMultipleObjects(2, handles, FALSE, 100, &dwSignaledIndex); |
| 385 | if (WAIT_OBJECT_0 == er) | 386 | ExitOnWaitObjectFailure(hr, fTimedOut, "Failed to wait for netfx chainer process to complete"); |
| 387 | |||
| 388 | if (fTimedOut) | ||
| 389 | { | ||
| 390 | continue; | ||
| 391 | } | ||
| 392 | |||
| 393 | switch (dwSignaledIndex) | ||
| 386 | { | 394 | { |
| 395 | case 0: | ||
| 387 | // Process has exited | 396 | // Process has exited |
| 388 | *pdwExitCode = NetFxGetResult(pNetfxChainer, &hrInternalError); | 397 | *pdwExitCode = NetFxGetResult(pNetfxChainer, &hrInternalError); |
| 389 | if (E_PENDING == *pdwExitCode) | 398 | if (E_PENDING == *pdwExitCode) |
| @@ -396,21 +405,17 @@ extern "C" HRESULT NetFxRunChainer( | |||
| 396 | else if (FAILED(hrInternalError)) | 405 | else if (FAILED(hrInternalError)) |
| 397 | { | 406 | { |
| 398 | // push internal error message | 407 | // push internal error message |
| 399 | OnNetFxError(pNetfxChainer, hrInternalError, pfnGenericMessageHandler, pvContext); | 408 | hr = OnNetFxError(pNetfxChainer, hrInternalError, pfnGenericMessageHandler, pvContext); |
| 400 | ExitOnFailure(hr, "Failed to send internal error message from netfx chainer."); | 409 | ExitOnFailure(hr, "Failed to send internal error message from netfx chainer."); |
| 401 | } | 410 | } |
| 402 | 411 | ||
| 403 | break; | 412 | ExitFunction(); |
| 404 | } | 413 | case 1: |
| 405 | else if (WAIT_OBJECT_0 + 1 == er) | ||
| 406 | { | ||
| 407 | // Chainee has notified us of a change. | 414 | // Chainee has notified us of a change. |
| 408 | hr = ProcessNetFxMessage(pNetfxChainer, pfnGenericMessageHandler, pvContext); | 415 | hr = ProcessNetFxMessage(pNetfxChainer, pfnGenericMessageHandler, pvContext); |
| 409 | ExitOnFailure(hr, "Failed to process netfx chainer message."); | 416 | ExitOnFailure(hr, "Failed to process netfx chainer message."); |
| 410 | } | 417 | |
| 411 | else if (WAIT_FAILED == er) | 418 | break; |
| 412 | { | ||
| 413 | ExitWithLastError(hr, "Failed to wait for netfx chainer process to complete"); | ||
| 414 | } | 419 | } |
| 415 | } | 420 | } |
| 416 | 421 | ||
