diff options
Diffstat (limited to 'src/engine/engine.cpp')
-rw-r--r-- | src/engine/engine.cpp | 21 |
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 | ); |
40 | static HRESULT RunApplication( | 40 | static 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 | ); |
44 | static HRESULT ProcessMessage( | 45 | static 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 | |||
592 | LExit: | 601 | LExit: |
593 | BurnExtensionUnload(&pEngineState->extensions); | 602 | BurnExtensionUnload(&pEngineState->extensions); |
594 | 603 | ||
@@ -732,7 +741,8 @@ LExit: | |||
732 | 741 | ||
733 | static HRESULT RunApplication( | 742 | static 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. |