diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-05-04 19:25:07 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-05-11 19:11:19 -0500 |
| commit | 27c6decae94536cae338731b6cb765aa92776486 (patch) | |
| tree | cabfb05464fdc64e30597da28a54113fc3a62da1 /src/burn/engine/mspengine.cpp | |
| parent | a2f2036c8598efcb434eebeeacd7ede84ab60dfe (diff) | |
| download | wix-27c6decae94536cae338731b6cb765aa92776486.tar.gz wix-27c6decae94536cae338731b6cb765aa92776486.tar.bz2 wix-27c6decae94536cae338731b6cb765aa92776486.zip | |
Put back the rollback cache package functionality and fix its bugs.
#3719, #4711, #5750
Diffstat (limited to 'src/burn/engine/mspengine.cpp')
| -rw-r--r-- | src/burn/engine/mspengine.cpp | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/src/burn/engine/mspengine.cpp b/src/burn/engine/mspengine.cpp index 6d58d324..4a82598f 100644 --- a/src/burn/engine/mspengine.cpp +++ b/src/burn/engine/mspengine.cpp | |||
| @@ -57,8 +57,7 @@ static HRESULT PlanTargetProduct( | |||
| 57 | __in BURN_VARIABLES* pVariables, | 57 | __in BURN_VARIABLES* pVariables, |
| 58 | __in BOOTSTRAPPER_ACTION_STATE actionState, | 58 | __in BOOTSTRAPPER_ACTION_STATE actionState, |
| 59 | __in BURN_PACKAGE* pPackage, | 59 | __in BURN_PACKAGE* pPackage, |
| 60 | __in BURN_MSPTARGETPRODUCT* pTargetProduct, | 60 | __in BURN_MSPTARGETPRODUCT* pTargetProduct |
| 61 | __in_opt HANDLE hCacheEvent | ||
| 62 | ); | 61 | ); |
| 63 | 62 | ||
| 64 | 63 | ||
| @@ -504,21 +503,11 @@ extern "C" HRESULT MspEnginePlanAddPackage( | |||
| 504 | __in BURN_PACKAGE* pPackage, | 503 | __in BURN_PACKAGE* pPackage, |
| 505 | __in BURN_PLAN* pPlan, | 504 | __in BURN_PLAN* pPlan, |
| 506 | __in BURN_LOGGING* pLog, | 505 | __in BURN_LOGGING* pLog, |
| 507 | __in BURN_VARIABLES* pVariables, | 506 | __in BURN_VARIABLES* pVariables |
| 508 | __in_opt HANDLE hCacheEvent | ||
| 509 | ) | 507 | ) |
| 510 | { | 508 | { |
| 511 | HRESULT hr = S_OK; | 509 | HRESULT hr = S_OK; |
| 512 | 510 | ||
| 513 | // TODO: need to handle the case where this patch adds itself to an earlier patch's list of target products. That would | ||
| 514 | // essentially bump this patch earlier in the plan and we need to make sure this patch is downloaded. | ||
| 515 | // add wait for cache | ||
| 516 | if (hCacheEvent) | ||
| 517 | { | ||
| 518 | hr = PlanExecuteCacheSyncAndRollback(pPlan, pPackage, hCacheEvent); | ||
| 519 | ExitOnFailure(hr, "Failed to plan package cache syncpoint"); | ||
| 520 | } | ||
| 521 | |||
| 522 | hr = DependencyPlanPackage(NULL, pPackage, pPlan); | 511 | hr = DependencyPlanPackage(NULL, pPackage, pPlan); |
| 523 | ExitOnFailure(hr, "Failed to plan package dependency actions."); | 512 | ExitOnFailure(hr, "Failed to plan package dependency actions."); |
| 524 | 513 | ||
| @@ -536,13 +525,13 @@ extern "C" HRESULT MspEnginePlanAddPackage( | |||
| 536 | 525 | ||
| 537 | if (BOOTSTRAPPER_ACTION_STATE_NONE != pTargetProduct->execute) | 526 | if (BOOTSTRAPPER_ACTION_STATE_NONE != pTargetProduct->execute) |
| 538 | { | 527 | { |
| 539 | hr = PlanTargetProduct(display, pUserExperience, FALSE, pPlan, pLog, pVariables, pTargetProduct->execute, pPackage, pTargetProduct, hCacheEvent); | 528 | hr = PlanTargetProduct(display, pUserExperience, FALSE, pPlan, pLog, pVariables, pTargetProduct->execute, pPackage, pTargetProduct); |
| 540 | ExitOnFailure(hr, "Failed to plan target product."); | 529 | ExitOnFailure(hr, "Failed to plan target product."); |
| 541 | } | 530 | } |
| 542 | 531 | ||
| 543 | if (BOOTSTRAPPER_ACTION_STATE_NONE != pTargetProduct->rollback) | 532 | if (BOOTSTRAPPER_ACTION_STATE_NONE != pTargetProduct->rollback) |
| 544 | { | 533 | { |
| 545 | hr = PlanTargetProduct(display, pUserExperience, TRUE, pPlan, pLog, pVariables, pTargetProduct->rollback, pPackage, pTargetProduct, hCacheEvent); | 534 | hr = PlanTargetProduct(display, pUserExperience, TRUE, pPlan, pLog, pVariables, pTargetProduct->rollback, pPackage, pTargetProduct); |
| 546 | ExitOnFailure(hr, "Failed to plan rollback target product."); | 535 | ExitOnFailure(hr, "Failed to plan rollback target product."); |
| 547 | } | 536 | } |
| 548 | } | 537 | } |
| @@ -1089,8 +1078,7 @@ static HRESULT PlanTargetProduct( | |||
| 1089 | __in BURN_VARIABLES* pVariables, | 1078 | __in BURN_VARIABLES* pVariables, |
| 1090 | __in BOOTSTRAPPER_ACTION_STATE actionState, | 1079 | __in BOOTSTRAPPER_ACTION_STATE actionState, |
| 1091 | __in BURN_PACKAGE* pPackage, | 1080 | __in BURN_PACKAGE* pPackage, |
| 1092 | __in BURN_MSPTARGETPRODUCT* pTargetProduct, | 1081 | __in BURN_MSPTARGETPRODUCT* pTargetProduct |
| 1093 | __in_opt HANDLE hCacheEvent | ||
| 1094 | ) | 1082 | ) |
| 1095 | { | 1083 | { |
| 1096 | HRESULT hr = S_OK; | 1084 | HRESULT hr = S_OK; |
| @@ -1153,16 +1141,17 @@ static HRESULT PlanTargetProduct( | |||
| 1153 | } | 1141 | } |
| 1154 | else | 1142 | else |
| 1155 | { | 1143 | { |
| 1156 | if (!fRollback && hCacheEvent) | 1144 | if (!fRollback && pPackage->hCacheEvent) |
| 1157 | { | 1145 | { |
| 1158 | // Since a previouse MSP target action is being updated with the new MSP, | 1146 | // TODO: need to properly handle rolling back the caching of the package since this causes cache and execute plans to get out of sync. |
| 1147 | // Since a previous MSP target action is being updated with the new MSP, | ||
| 1159 | // insert a wait syncpoint to before this action since we need to cache the current MSI before using it. | 1148 | // insert a wait syncpoint to before this action since we need to cache the current MSI before using it. |
| 1160 | BURN_EXECUTE_ACTION* pWaitSyncPointAction = NULL; | 1149 | BURN_EXECUTE_ACTION* pWaitSyncPointAction = NULL; |
| 1161 | hr = PlanInsertExecuteAction(dwInsertSequence, pPlan, &pWaitSyncPointAction); | 1150 | hr = PlanInsertExecuteAction(dwInsertSequence, pPlan, &pWaitSyncPointAction); |
| 1162 | ExitOnFailure(hr, "Failed to insert execute action."); | 1151 | ExitOnFailure(hr, "Failed to insert execute action."); |
| 1163 | 1152 | ||
| 1164 | pWaitSyncPointAction->type = BURN_EXECUTE_ACTION_TYPE_WAIT_SYNCPOINT; | 1153 | pWaitSyncPointAction->type = BURN_EXECUTE_ACTION_TYPE_WAIT_CACHE_PACKAGE; |
| 1165 | pWaitSyncPointAction->syncpoint.hEvent = hCacheEvent; | 1154 | pWaitSyncPointAction->waitCachePackage.pPackage = pPackage; |
| 1166 | 1155 | ||
| 1167 | // Since we inserted an action before the MSP target action that we will be updating, need to update the pointer. | 1156 | // Since we inserted an action before the MSP target action that we will be updating, need to update the pointer. |
| 1168 | pAction = pPlan->rgExecuteActions + (dwInsertSequence + 1); | 1157 | pAction = pPlan->rgExecuteActions + (dwInsertSequence + 1); |
