aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/netfxchainer.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-06-29 10:28:53 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-06-29 15:08:37 -0500
commit7cca75c8e95f129a21c33f1f4568e90e9e397f9d (patch)
treecb9890caa1ac8bc891d444b6376a5e9f997ca1e3 /src/burn/engine/netfxchainer.cpp
parent3ff6428a068bafd74d8ec072a5fc261c33cc2019 (diff)
downloadwix-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.cpp31
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