aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/plan.cpp
diff options
context:
space:
mode:
authorNir Bar <nir.bar@panel-sw.co.il>2021-08-11 15:37:34 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-08-12 14:50:55 -0500
commit0042e3d4554a0d92e1da6141854b0f1aafa07d5b (patch)
tree7dcd25456993d6a9d68b9afd21fd1d1f77bd2a5e /src/burn/engine/plan.cpp
parentc6b138ed166e30c750e499919b858dc6913937b6 (diff)
downloadwix-0042e3d4554a0d92e1da6141854b0f1aafa07d5b.tar.gz
wix-0042e3d4554a0d92e1da6141854b0f1aafa07d5b.tar.bz2
wix-0042e3d4554a0d92e1da6141854b0f1aafa07d5b.zip
Allow BA to opt out of MSI transaction.
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