diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-06-29 10:28:53 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-06-29 15:08:37 -0500 |
commit | 7cca75c8e95f129a21c33f1f4568e90e9e397f9d (patch) | |
tree | cb9890caa1ac8bc891d444b6376a5e9f997ca1e3 /src/burn/engine/netfxchainer.cpp | |
parent | 3ff6428a068bafd74d8ec072a5fc261c33cc2019 (diff) | |
download | wix-7cca75c8e95f129a21c33f1f4568e90e9e397f9d.tar.gz wix-7cca75c8e95f129a21c33f1f4568e90e9e397f9d.tar.bz2 wix-7cca75c8e95f129a21c33f1f4568e90e9e397f9d.zip |
Add AppWaitForSingleObject/MultipleObjects, ThreadWaitForCompletion.
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 | ||