aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/plan.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/plan.cpp')
-rw-r--r--src/burn/engine/plan.cpp26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp
index d78f2846..85d958a6 100644
--- a/src/burn/engine/plan.cpp
+++ b/src/burn/engine/plan.cpp
@@ -59,6 +59,9 @@ static HRESULT ProcessPackage(
59 ); 59 );
60static HRESULT ProcessPackageRollbackBoundary( 60static HRESULT ProcessPackageRollbackBoundary(
61 __in BURN_PLAN* pPlan, 61 __in BURN_PLAN* pPlan,
62 __in BURN_USER_EXPERIENCE* pUX,
63 __in BURN_LOGGING* pLog,
64 __in BURN_VARIABLES* pVariables,
62 __in_opt BURN_ROLLBACK_BOUNDARY* pEffectiveRollbackBoundary, 65 __in_opt BURN_ROLLBACK_BOUNDARY* pEffectiveRollbackBoundary,
63 __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary 66 __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary
64 ); 67 );
@@ -901,7 +904,7 @@ static HRESULT ProcessPackage(
901 BURN_ROLLBACK_BOUNDARY* pEffectiveRollbackBoundary = NULL; 904 BURN_ROLLBACK_BOUNDARY* pEffectiveRollbackBoundary = NULL;
902 905
903 pEffectiveRollbackBoundary = (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) ? pPackage->pRollbackBoundaryBackward : pPackage->pRollbackBoundaryForward; 906 pEffectiveRollbackBoundary = (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) ? pPackage->pRollbackBoundaryBackward : pPackage->pRollbackBoundaryForward;
904 hr = ProcessPackageRollbackBoundary(pPlan, pEffectiveRollbackBoundary, ppRollbackBoundary); 907 hr = ProcessPackageRollbackBoundary(pPlan, pUX, pLog, pVariables, pEffectiveRollbackBoundary, ppRollbackBoundary);
905 ExitOnFailure(hr, "Failed to process package rollback boundary."); 908 ExitOnFailure(hr, "Failed to process package rollback boundary.");
906 909
907 if (BOOTSTRAPPER_ACTION_LAYOUT == pPlan->action) 910 if (BOOTSTRAPPER_ACTION_LAYOUT == pPlan->action)
@@ -952,6 +955,9 @@ LExit:
952 955
953static HRESULT ProcessPackageRollbackBoundary( 956static HRESULT ProcessPackageRollbackBoundary(
954 __in BURN_PLAN* pPlan, 957 __in BURN_PLAN* pPlan,
958 __in BURN_USER_EXPERIENCE* pUX,
959 __in BURN_LOGGING* pLog,
960 __in BURN_VARIABLES* pVariables,
955 __in_opt BURN_ROLLBACK_BOUNDARY* pEffectiveRollbackBoundary, 961 __in_opt BURN_ROLLBACK_BOUNDARY* pEffectiveRollbackBoundary,
956 __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary 962 __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary
957 ) 963 )
@@ -969,7 +975,7 @@ static HRESULT ProcessPackageRollbackBoundary(
969 } 975 }
970 976
971 // Start new rollback boundary. 977 // Start new rollback boundary.
972 hr = PlanRollbackBoundaryBegin(pPlan, pEffectiveRollbackBoundary); 978 hr = PlanRollbackBoundaryBegin(pPlan, pUX, pLog, pVariables, pEffectiveRollbackBoundary);
973 ExitOnFailure(hr, "Failed to plan rollback boundary begin."); 979 ExitOnFailure(hr, "Failed to plan rollback boundary begin.");
974 980
975 *ppRollbackBoundary = pEffectiveRollbackBoundary; 981 *ppRollbackBoundary = pEffectiveRollbackBoundary;
@@ -1702,6 +1708,9 @@ LExit:
1702 1708
1703extern "C" HRESULT PlanRollbackBoundaryBegin( 1709extern "C" HRESULT PlanRollbackBoundaryBegin(
1704 __in BURN_PLAN* pPlan, 1710 __in BURN_PLAN* pPlan,
1711 __in BURN_USER_EXPERIENCE* pUX,
1712 __in BURN_LOGGING* /*pLog*/,
1713 __in BURN_VARIABLES* /*pVariables*/,
1705 __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary 1714 __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary
1706 ) 1715 )
1707{ 1716{
@@ -1725,9 +1734,17 @@ extern "C" HRESULT PlanRollbackBoundaryBegin(
1725 pExecuteAction->type = BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY; 1734 pExecuteAction->type = BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY;
1726 pExecuteAction->rollbackBoundary.pRollbackBoundary = pRollbackBoundary; 1735 pExecuteAction->rollbackBoundary.pRollbackBoundary = pRollbackBoundary;
1727 1736
1728 // Add begin MSI transaction to execute plan. 1737 hr = UserExperienceOnPlanRollbackBoundary(pUX, pRollbackBoundary->sczId, &pRollbackBoundary->fTransaction);
1729 if (pRollbackBoundary->fTransaction) 1738 ExitOnRootFailure(hr, "BA aborted plan rollback boundary.");
1739
1740 // Only use MSI transaction if authored and the BA requested it.
1741 if (!pRollbackBoundary->fTransactionAuthored || !pRollbackBoundary->fTransaction)
1742 {
1743 pRollbackBoundary->fTransaction = FALSE;
1744 }
1745 else
1730 { 1746 {
1747 // Add begin MSI transaction to execute plan.
1731 hr = PlanExecuteCheckpoint(pPlan); 1748 hr = PlanExecuteCheckpoint(pPlan);
1732 ExitOnFailure(hr, "Failed to append checkpoint before MSI transaction begin action."); 1749 ExitOnFailure(hr, "Failed to append checkpoint before MSI transaction begin action.");
1733 1750
@@ -1925,6 +1942,7 @@ static void ResetPlannedRollbackBoundaryState(
1925 ) 1942 )
1926{ 1943{
1927 pRollbackBoundary->fActiveTransaction = FALSE; 1944 pRollbackBoundary->fActiveTransaction = FALSE;
1945 pRollbackBoundary->fTransaction = pRollbackBoundary->fTransactionAuthored;
1928 ReleaseNullStr(pRollbackBoundary->sczLogPath); 1946 ReleaseNullStr(pRollbackBoundary->sczLogPath);
1929} 1947}
1930 1948