diff options
| author | Nir Bar <nir.bar@panel-sw.co.il> | 2021-08-11 15:37:34 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-08-12 14:50:55 -0500 |
| commit | 0042e3d4554a0d92e1da6141854b0f1aafa07d5b (patch) | |
| tree | 7dcd25456993d6a9d68b9afd21fd1d1f77bd2a5e /src/burn/engine/plan.cpp | |
| parent | c6b138ed166e30c750e499919b858dc6913937b6 (diff) | |
| download | wix-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.cpp | 26 |
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 | ); |
| 60 | static HRESULT ProcessPackageRollbackBoundary( | 60 | static 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 | ||
| 953 | static HRESULT ProcessPackageRollbackBoundary( | 956 | static 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 | ||
| 1703 | extern "C" HRESULT PlanRollbackBoundaryBegin( | 1709 | extern "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 | ||
