aboutsummaryrefslogtreecommitdiff
path: root/src/engine/engine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/engine.cpp')
-rw-r--r--src/engine/engine.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp
index e3ace592..bc27cb14 100644
--- a/src/engine/engine.cpp
+++ b/src/engine/engine.cpp
@@ -39,7 +39,8 @@ static HRESULT RunRunOnce(
39 ); 39 );
40static HRESULT RunApplication( 40static HRESULT RunApplication(
41 __in BURN_ENGINE_STATE* pEngineState, 41 __in BURN_ENGINE_STATE* pEngineState,
42 __out BOOL* pfReloadApp 42 __out BOOL* pfReloadApp,
43 __out BOOL* pfSkipCleanup
43 ); 44 );
44static HRESULT ProcessMessage( 45static HRESULT ProcessMessage(
45 __in BURN_ENGINE_STATE* pEngineState, 46 __in BURN_ENGINE_STATE* pEngineState,
@@ -529,6 +530,7 @@ static HRESULT RunNormal(
529 HANDLE hPipesCreatedEvent = NULL; 530 HANDLE hPipesCreatedEvent = NULL;
530 BOOL fContinueExecution = TRUE; 531 BOOL fContinueExecution = TRUE;
531 BOOL fReloadApp = FALSE; 532 BOOL fReloadApp = FALSE;
533 BOOL fSkipCleanup = FALSE;
532 BURN_EXTENSION_ENGINE_CONTEXT extensionEngineContext = { }; 534 BURN_EXTENSION_ENGINE_CONTEXT extensionEngineContext = { };
533 535
534 // Initialize logging. 536 // Initialize logging.
@@ -584,11 +586,18 @@ static HRESULT RunNormal(
584 do 586 do
585 { 587 {
586 fReloadApp = FALSE; 588 fReloadApp = FALSE;
589 pEngineState->fQuit = FALSE;
587 590
588 hr = RunApplication(pEngineState, &fReloadApp); 591 hr = RunApplication(pEngineState, &fReloadApp, &fSkipCleanup);
589 ExitOnFailure(hr, "Failed while running "); 592 ExitOnFailure(hr, "Failed while running ");
590 } while (fReloadApp); 593 } while (fReloadApp);
591 594
595 if (!fSkipCleanup)
596 {
597 hr = CoreCleanup(pEngineState);
598 ExitOnFailure(hr, "Failed to cleanup before shutting down");
599 }
600
592LExit: 601LExit:
593 BurnExtensionUnload(&pEngineState->extensions); 602 BurnExtensionUnload(&pEngineState->extensions);
594 603
@@ -732,7 +741,8 @@ LExit:
732 741
733static HRESULT RunApplication( 742static HRESULT RunApplication(
734 __in BURN_ENGINE_STATE* pEngineState, 743 __in BURN_ENGINE_STATE* pEngineState,
735 __out BOOL* pfReloadApp 744 __out BOOL* pfReloadApp,
745 __out BOOL* pfSkipCleanup
736 ) 746 )
737{ 747{
738 HRESULT hr = S_OK; 748 HRESULT hr = S_OK;
@@ -787,6 +797,11 @@ LExit:
787 LogId(REPORT_STANDARD, MSG_BA_REQUESTED_RELOAD); 797 LogId(REPORT_STANDARD, MSG_BA_REQUESTED_RELOAD);
788 *pfReloadApp = TRUE; 798 *pfReloadApp = TRUE;
789 } 799 }
800 else if (BOOTSTRAPPER_SHUTDOWN_ACTION_SKIP_CLEANUP == shutdownAction)
801 {
802 LogId(REPORT_STANDARD, MSG_BA_REQUESTED_SKIP_CLEANUP);
803 *pfSkipCleanup = TRUE;
804 }
790 } 805 }
791 806
792 // Unload BA. 807 // Unload BA.