summaryrefslogtreecommitdiff
path: root/src/burn/engine/cabextract.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/cabextract.cpp')
-rw-r--r--src/burn/engine/cabextract.cpp42
1 files changed, 18 insertions, 24 deletions
diff --git a/src/burn/engine/cabextract.cpp b/src/burn/engine/cabextract.cpp
index 5a02ff8a..56146a39 100644
--- a/src/burn/engine/cabextract.cpp
+++ b/src/burn/engine/cabextract.cpp
@@ -262,10 +262,8 @@ extern "C" HRESULT CabExtractClose(
262 } 262 }
263 263
264 // wait for thread to terminate 264 // wait for thread to terminate
265 if (WAIT_OBJECT_0 != ::WaitForSingleObject(pContext->Cabinet.hThread, INFINITE)) 265 hr = AppWaitForSingleObject(pContext->Cabinet.hThread, INFINITE);
266 { 266 ExitOnFailure(hr, "Failed to wait for thread to terminate.");
267 ExitWithLastError(hr, "Failed to wait for thread to terminate.");
268 }
269 } 267 }
270 268
271LExit: 269LExit:
@@ -306,29 +304,31 @@ static HRESULT WaitForOperation(
306{ 304{
307 HRESULT hr = S_OK; 305 HRESULT hr = S_OK;
308 HANDLE rghWait[2] = { }; 306 HANDLE rghWait[2] = { };
307 DWORD dwSignaledIndex = 0;
309 308
310 // wait for operation complete event 309 // wait for operation complete event
311 rghWait[0] = pContext->Cabinet.hOperationCompleteEvent; 310 rghWait[0] = pContext->Cabinet.hOperationCompleteEvent;
312 rghWait[1] = pContext->Cabinet.hThread; 311 rghWait[1] = pContext->Cabinet.hThread;
313 switch (::WaitForMultipleObjects(countof(rghWait), rghWait, FALSE, INFINITE)) 312
313 hr = AppWaitForMultipleObjects(countof(rghWait), rghWait, FALSE, INFINITE, &dwSignaledIndex);
314 ExitOnFailure(hr, "Failed to wait for operation complete event.");
315
316 switch (dwSignaledIndex)
314 { 317 {
315 case WAIT_OBJECT_0: 318 case 0:
316 if (!::ResetEvent(pContext->Cabinet.hOperationCompleteEvent)) 319 if (!::ResetEvent(pContext->Cabinet.hOperationCompleteEvent))
317 { 320 {
318 ExitWithLastError(hr, "Failed to reset operation complete event."); 321 ExitWithLastError(hr, "Failed to reset operation complete event.");
319 } 322 }
320 break;
321 323
322 case WAIT_OBJECT_0 + 1: 324 break;
325 case 1:
323 if (!::GetExitCodeThread(pContext->Cabinet.hThread, (DWORD*)&hr)) 326 if (!::GetExitCodeThread(pContext->Cabinet.hThread, (DWORD*)&hr))
324 { 327 {
325 ExitWithLastError(hr, "Failed to get extraction thread exit code."); 328 ExitWithLastError(hr, "Failed to get extraction thread exit code.");
326 } 329 }
327 ExitFunction();
328 330
329 case WAIT_FAILED: __fallthrough; 331 ExitFunction();
330 default:
331 ExitWithLastError(hr, "Failed to wait for operation complete event.");
332 } 332 }
333 333
334 // clear operation 334 // clear operation
@@ -430,10 +430,8 @@ static DWORD WINAPI ExtractThreadProc(
430 } 430 }
431 431
432 // wait for begin operation event 432 // wait for begin operation event
433 if (WAIT_FAILED == ::WaitForSingleObject(pContext->Cabinet.hBeginOperationEvent, INFINITE)) 433 hr = AppWaitForSingleObject(pContext->Cabinet.hBeginOperationEvent, INFINITE);
434 { 434 ExitOnFailure(hr, "Failed to wait for begin operation event.");
435 ExitWithLastError(hr, "Failed to wait for begin operation event.");
436 }
437 435
438 if (!::ResetEvent(pContext->Cabinet.hBeginOperationEvent)) 436 if (!::ResetEvent(pContext->Cabinet.hBeginOperationEvent))
439 { 437 {
@@ -517,10 +515,8 @@ static INT_PTR CopyFileCallback(
517 } 515 }
518 516
519 // wait for begin operation event 517 // wait for begin operation event
520 if (WAIT_FAILED == ::WaitForSingleObject(pContext->Cabinet.hBeginOperationEvent, INFINITE)) 518 hr = AppWaitForSingleObject(pContext->Cabinet.hBeginOperationEvent, INFINITE);
521 { 519 ExitOnFailure(hr, "Failed to wait for begin operation event.");
522 ExitWithLastError(hr, "Failed to wait for begin operation event.");
523 }
524 520
525 if (!::ResetEvent(pContext->Cabinet.hBeginOperationEvent)) 521 if (!::ResetEvent(pContext->Cabinet.hBeginOperationEvent))
526 { 522 {
@@ -552,10 +548,8 @@ static INT_PTR CopyFileCallback(
552 } 548 }
553 549
554 // wait for begin operation event 550 // wait for begin operation event
555 if (WAIT_FAILED == ::WaitForSingleObject(pContext->Cabinet.hBeginOperationEvent, INFINITE)) 551 hr = AppWaitForSingleObject(pContext->Cabinet.hBeginOperationEvent, INFINITE);
556 { 552 ExitOnFailure(hr, "Failed to wait for begin operation event.");
557 ExitWithLastError(hr, "Failed to wait for begin operation event.");
558 }
559 553
560 if (!::ResetEvent(pContext->Cabinet.hBeginOperationEvent)) 554 if (!::ResetEvent(pContext->Cabinet.hBeginOperationEvent))
561 { 555 {