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/plan.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/plan.cpp')
| -rw-r--r-- | src/burn/engine/plan.cpp | 128 |
1 files changed, 46 insertions, 82 deletions
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp index f0ae2a44..d1f07508 100644 --- a/src/burn/engine/plan.cpp +++ b/src/burn/engine/plan.cpp | |||
| @@ -55,7 +55,6 @@ static HRESULT ProcessPackage( | |||
| 55 | __in BURN_LOGGING* pLog, | 55 | __in BURN_LOGGING* pLog, |
| 56 | __in BURN_VARIABLES* pVariables, | 56 | __in BURN_VARIABLES* pVariables, |
| 57 | __in BOOTSTRAPPER_DISPLAY display, | 57 | __in BOOTSTRAPPER_DISPLAY display, |
| 58 | __inout HANDLE* phSyncpointEvent, | ||
| 59 | __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary | 58 | __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary |
| 60 | ); | 59 | ); |
| 61 | static HRESULT ProcessPackageRollbackBoundary( | 60 | static HRESULT ProcessPackageRollbackBoundary( |
| @@ -77,23 +76,16 @@ static HRESULT AddRegistrationAction( | |||
| 77 | ); | 76 | ); |
| 78 | static HRESULT AddCachePackage( | 77 | static HRESULT AddCachePackage( |
| 79 | __in BURN_PLAN* pPlan, | 78 | __in BURN_PLAN* pPlan, |
| 80 | __in BURN_PACKAGE* pPackage, | 79 | __in BURN_PACKAGE* pPackage |
| 81 | __out HANDLE* phSyncpointEvent | ||
| 82 | ); | 80 | ); |
| 83 | static HRESULT AddCachePackageHelper( | 81 | static HRESULT AddCachePackageHelper( |
| 84 | __in BURN_PLAN* pPlan, | 82 | __in BURN_PLAN* pPlan, |
| 85 | __in BURN_PACKAGE* pPackage, | 83 | __in BURN_PACKAGE* pPackage |
| 86 | __out HANDLE* phSyncpointEvent | ||
| 87 | ); | 84 | ); |
| 88 | static HRESULT AddCacheSlipstreamMsps( | 85 | static HRESULT AddCacheSlipstreamMsps( |
| 89 | __in BURN_PLAN* pPlan, | 86 | __in BURN_PLAN* pPlan, |
| 90 | __in BURN_PACKAGE* pPackage | 87 | __in BURN_PACKAGE* pPackage |
| 91 | ); | 88 | ); |
| 92 | static BOOL AlreadyPlannedCachePackage( | ||
| 93 | __in BURN_PLAN* pPlan, | ||
| 94 | __in_z LPCWSTR wzPackageId, | ||
| 95 | __out HANDLE* phSyncpointEvent | ||
| 96 | ); | ||
| 97 | static DWORD GetNextCheckpointId( | 89 | static DWORD GetNextCheckpointId( |
| 98 | __in BURN_PLAN* pPlan | 90 | __in BURN_PLAN* pPlan |
| 99 | ); | 91 | ); |
| @@ -765,7 +757,6 @@ static HRESULT PlanPackagesHelper( | |||
| 765 | HRESULT hr = S_OK; | 757 | HRESULT hr = S_OK; |
| 766 | BOOL fBundlePerMachine = pPlan->fPerMachine; // bundle is per-machine if plan starts per-machine. | 758 | BOOL fBundlePerMachine = pPlan->fPerMachine; // bundle is per-machine if plan starts per-machine. |
| 767 | BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; | 759 | BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; |
| 768 | HANDLE hSyncpointEvent = NULL; | ||
| 769 | 760 | ||
| 770 | // Initialize the packages. | 761 | // Initialize the packages. |
| 771 | for (DWORD i = 0; i < cPackages; ++i) | 762 | for (DWORD i = 0; i < cPackages; ++i) |
| @@ -796,7 +787,7 @@ static HRESULT PlanPackagesHelper( | |||
| 796 | DWORD iPackage = (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) ? cPackages - 1 - i : i; | 787 | DWORD iPackage = (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) ? cPackages - 1 - i : i; |
| 797 | BURN_PACKAGE* pPackage = rgPackages + iPackage; | 788 | BURN_PACKAGE* pPackage = rgPackages + iPackage; |
| 798 | 789 | ||
| 799 | hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, &hSyncpointEvent, &pRollbackBoundary); | 790 | hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, &pRollbackBoundary); |
| 800 | ExitOnFailure(hr, "Failed to process package."); | 791 | ExitOnFailure(hr, "Failed to process package."); |
| 801 | } | 792 | } |
| 802 | 793 | ||
| @@ -902,7 +893,6 @@ static HRESULT ProcessPackage( | |||
| 902 | __in BURN_LOGGING* pLog, | 893 | __in BURN_LOGGING* pLog, |
| 903 | __in BURN_VARIABLES* pVariables, | 894 | __in BURN_VARIABLES* pVariables, |
| 904 | __in BOOTSTRAPPER_DISPLAY display, | 895 | __in BOOTSTRAPPER_DISPLAY display, |
| 905 | __inout HANDLE* phSyncpointEvent, | ||
| 906 | __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary | 896 | __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary |
| 907 | ) | 897 | ) |
| 908 | { | 898 | { |
| @@ -926,14 +916,14 @@ static HRESULT ProcessPackage( | |||
| 926 | if (BOOTSTRAPPER_REQUEST_STATE_NONE != pPackage->requested) | 916 | if (BOOTSTRAPPER_REQUEST_STATE_NONE != pPackage->requested) |
| 927 | { | 917 | { |
| 928 | // If the package is in a requested state, plan it. | 918 | // If the package is in a requested state, plan it. |
| 929 | hr = PlanExecutePackage(fBundlePerMachine, display, pUX, pPlan, pPackage, pLog, pVariables, phSyncpointEvent); | 919 | hr = PlanExecutePackage(fBundlePerMachine, display, pUX, pPlan, pPackage, pLog, pVariables); |
| 930 | ExitOnFailure(hr, "Failed to plan execute package."); | 920 | ExitOnFailure(hr, "Failed to plan execute package."); |
| 931 | } | 921 | } |
| 932 | else | 922 | else |
| 933 | { | 923 | { |
| 934 | if (ForceCache(pPlan, pPackage)) | 924 | if (ForceCache(pPlan, pPackage)) |
| 935 | { | 925 | { |
| 936 | hr = AddCachePackage(pPlan, pPackage, phSyncpointEvent); | 926 | hr = AddCachePackage(pPlan, pPackage); |
| 937 | ExitOnFailure(hr, "Failed to plan cache package."); | 927 | ExitOnFailure(hr, "Failed to plan cache package."); |
| 938 | 928 | ||
| 939 | if (pPackage->fPerMachine) | 929 | if (pPackage->fPerMachine) |
| @@ -1072,8 +1062,7 @@ extern "C" HRESULT PlanExecutePackage( | |||
| 1072 | __in BURN_PLAN* pPlan, | 1062 | __in BURN_PLAN* pPlan, |
| 1073 | __in BURN_PACKAGE* pPackage, | 1063 | __in BURN_PACKAGE* pPackage, |
| 1074 | __in BURN_LOGGING* pLog, | 1064 | __in BURN_LOGGING* pLog, |
| 1075 | __in BURN_VARIABLES* pVariables, | 1065 | __in BURN_VARIABLES* pVariables |
| 1076 | __inout HANDLE* phSyncpointEvent | ||
| 1077 | ) | 1066 | ) |
| 1078 | { | 1067 | { |
| 1079 | HRESULT hr = S_OK; | 1068 | HRESULT hr = S_OK; |
| @@ -1088,7 +1077,7 @@ extern "C" HRESULT PlanExecutePackage( | |||
| 1088 | 1077 | ||
| 1089 | if (fRequestedCache || NeedsCache(pPackage, TRUE)) | 1078 | if (fRequestedCache || NeedsCache(pPackage, TRUE)) |
| 1090 | { | 1079 | { |
| 1091 | hr = AddCachePackage(pPlan, pPackage, phSyncpointEvent); | 1080 | hr = AddCachePackage(pPlan, pPackage); |
| 1092 | ExitOnFailure(hr, "Failed to plan cache package."); | 1081 | ExitOnFailure(hr, "Failed to plan cache package."); |
| 1093 | } | 1082 | } |
| 1094 | else if (!pPackage->fCached && NeedsCache(pPackage, FALSE)) | 1083 | else if (!pPackage->fCached && NeedsCache(pPackage, FALSE)) |
| @@ -1128,19 +1117,19 @@ extern "C" HRESULT PlanExecutePackage( | |||
| 1128 | switch (pPackage->type) | 1117 | switch (pPackage->type) |
| 1129 | { | 1118 | { |
| 1130 | case BURN_PACKAGE_TYPE_EXE: | 1119 | case BURN_PACKAGE_TYPE_EXE: |
| 1131 | hr = ExeEnginePlanAddPackage(NULL, pPackage, pPlan, pLog, pVariables, *phSyncpointEvent); | 1120 | hr = ExeEnginePlanAddPackage(NULL, pPackage, pPlan, pLog, pVariables); |
| 1132 | break; | 1121 | break; |
| 1133 | 1122 | ||
| 1134 | case BURN_PACKAGE_TYPE_MSI: | 1123 | case BURN_PACKAGE_TYPE_MSI: |
| 1135 | hr = MsiEnginePlanAddPackage(display, pUserExperience, pPackage, pPlan, pLog, pVariables, *phSyncpointEvent); | 1124 | hr = MsiEnginePlanAddPackage(display, pUserExperience, pPackage, pPlan, pLog, pVariables); |
| 1136 | break; | 1125 | break; |
| 1137 | 1126 | ||
| 1138 | case BURN_PACKAGE_TYPE_MSP: | 1127 | case BURN_PACKAGE_TYPE_MSP: |
| 1139 | hr = MspEnginePlanAddPackage(display, pUserExperience, pPackage, pPlan, pLog, pVariables, *phSyncpointEvent); | 1128 | hr = MspEnginePlanAddPackage(display, pUserExperience, pPackage, pPlan, pLog, pVariables); |
| 1140 | break; | 1129 | break; |
| 1141 | 1130 | ||
| 1142 | case BURN_PACKAGE_TYPE_MSU: | 1131 | case BURN_PACKAGE_TYPE_MSU: |
| 1143 | hr = MsuEnginePlanAddPackage(pPackage, pPlan, pLog, pVariables, *phSyncpointEvent); | 1132 | hr = MsuEnginePlanAddPackage(pPackage, pPlan, pLog, pVariables); |
| 1144 | break; | 1133 | break; |
| 1145 | 1134 | ||
| 1146 | default: | 1135 | default: |
| @@ -1453,7 +1442,7 @@ extern "C" HRESULT PlanRelatedBundlesComplete( | |||
| 1453 | } | 1442 | } |
| 1454 | } | 1443 | } |
| 1455 | 1444 | ||
| 1456 | hr = ExeEnginePlanAddPackage(pdwInsertIndex, &pRelatedBundle->package, pPlan, pLog, pVariables, NULL); | 1445 | hr = ExeEnginePlanAddPackage(pdwInsertIndex, &pRelatedBundle->package, pPlan, pLog, pVariables); |
| 1457 | ExitOnFailure(hr, "Failed to add to plan related bundle: %ls", pRelatedBundle->package.sczId); | 1446 | ExitOnFailure(hr, "Failed to add to plan related bundle: %ls", pRelatedBundle->package.sczId); |
| 1458 | 1447 | ||
| 1459 | // Calculate package states based on reference count for addon and patch related bundles. | 1448 | // Calculate package states based on reference count for addon and patch related bundles. |
| @@ -1583,28 +1572,30 @@ LExit: | |||
| 1583 | 1572 | ||
| 1584 | extern "C" HRESULT PlanExecuteCacheSyncAndRollback( | 1573 | extern "C" HRESULT PlanExecuteCacheSyncAndRollback( |
| 1585 | __in BURN_PLAN* pPlan, | 1574 | __in BURN_PLAN* pPlan, |
| 1586 | __in BURN_PACKAGE* pPackage, | 1575 | __in BURN_PACKAGE* pPackage |
| 1587 | __in HANDLE hCacheEvent | ||
| 1588 | ) | 1576 | ) |
| 1589 | { | 1577 | { |
| 1590 | HRESULT hr = S_OK; | 1578 | HRESULT hr = S_OK; |
| 1591 | BURN_EXECUTE_ACTION* pAction = NULL; | 1579 | BURN_EXECUTE_ACTION* pAction = NULL; |
| 1592 | 1580 | ||
| 1593 | hr = PlanAppendExecuteAction(pPlan, &pAction); | 1581 | if (!pPlan->fBundleAlreadyRegistered) |
| 1594 | ExitOnFailure(hr, "Failed to append wait action for caching."); | 1582 | { |
| 1595 | 1583 | hr = PlanAppendRollbackAction(pPlan, &pAction); | |
| 1596 | pAction->type = BURN_EXECUTE_ACTION_TYPE_WAIT_SYNCPOINT; | 1584 | ExitOnFailure(hr, "Failed to append rollback action."); |
| 1597 | pAction->syncpoint.hEvent = hCacheEvent; | ||
| 1598 | |||
| 1599 | hr = PlanAppendRollbackAction(pPlan, &pAction); | ||
| 1600 | ExitOnFailure(hr, "Failed to append rollback action."); | ||
| 1601 | 1585 | ||
| 1602 | pAction->type = BURN_EXECUTE_ACTION_TYPE_UNCACHE_PACKAGE; | 1586 | pAction->type = BURN_EXECUTE_ACTION_TYPE_UNCACHE_PACKAGE; |
| 1603 | pAction->uncachePackage.pPackage = pPackage; | 1587 | pAction->uncachePackage.pPackage = pPackage; |
| 1588 | } | ||
| 1604 | 1589 | ||
| 1605 | hr = PlanExecuteCheckpoint(pPlan); | 1590 | hr = PlanExecuteCheckpoint(pPlan); |
| 1606 | ExitOnFailure(hr, "Failed to append execute checkpoint for cache rollback."); | 1591 | ExitOnFailure(hr, "Failed to append execute checkpoint for cache rollback."); |
| 1607 | 1592 | ||
| 1593 | hr = PlanAppendExecuteAction(pPlan, &pAction); | ||
| 1594 | ExitOnFailure(hr, "Failed to append wait action for caching."); | ||
| 1595 | |||
| 1596 | pAction->type = BURN_EXECUTE_ACTION_TYPE_WAIT_CACHE_PACKAGE; | ||
| 1597 | pAction->waitCachePackage.pPackage = pPackage; | ||
| 1598 | |||
| 1608 | LExit: | 1599 | LExit: |
| 1609 | return hr; | 1600 | return hr; |
| 1610 | } | 1601 | } |
| @@ -1885,6 +1876,7 @@ static void ResetPlannedPackageState( | |||
| 1885 | pPackage->fDependencyManagerWasHere = FALSE; | 1876 | pPackage->fDependencyManagerWasHere = FALSE; |
| 1886 | pPackage->expectedCacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN; | 1877 | pPackage->expectedCacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN; |
| 1887 | pPackage->expectedInstallRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN; | 1878 | pPackage->expectedInstallRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN; |
| 1879 | pPackage->hCacheEvent = NULL; | ||
| 1888 | 1880 | ||
| 1889 | ReleaseNullStr(pPackage->sczCacheFolder); | 1881 | ReleaseNullStr(pPackage->sczCacheFolder); |
| 1890 | 1882 | ||
| @@ -2046,8 +2038,7 @@ LExit: | |||
| 2046 | 2038 | ||
| 2047 | static HRESULT AddCachePackage( | 2039 | static HRESULT AddCachePackage( |
| 2048 | __in BURN_PLAN* pPlan, | 2040 | __in BURN_PLAN* pPlan, |
| 2049 | __in BURN_PACKAGE* pPackage, | 2041 | __in BURN_PACKAGE* pPackage |
| 2050 | __out HANDLE* phSyncpointEvent | ||
| 2051 | ) | 2042 | ) |
| 2052 | { | 2043 | { |
| 2053 | HRESULT hr = S_OK; | 2044 | HRESULT hr = S_OK; |
| @@ -2059,7 +2050,7 @@ static HRESULT AddCachePackage( | |||
| 2059 | ExitOnFailure(hr, "Failed to plan slipstream patches for package."); | 2050 | ExitOnFailure(hr, "Failed to plan slipstream patches for package."); |
| 2060 | } | 2051 | } |
| 2061 | 2052 | ||
| 2062 | hr = AddCachePackageHelper(pPlan, pPackage, phSyncpointEvent); | 2053 | hr = AddCachePackageHelper(pPlan, pPackage); |
| 2063 | ExitOnFailure(hr, "Failed to plan cache package."); | 2054 | ExitOnFailure(hr, "Failed to plan cache package."); |
| 2064 | 2055 | ||
| 2065 | LExit: | 2056 | LExit: |
| @@ -2068,8 +2059,7 @@ LExit: | |||
| 2068 | 2059 | ||
| 2069 | static HRESULT AddCachePackageHelper( | 2060 | static HRESULT AddCachePackageHelper( |
| 2070 | __in BURN_PLAN* pPlan, | 2061 | __in BURN_PLAN* pPlan, |
| 2071 | __in BURN_PACKAGE* pPackage, | 2062 | __in BURN_PACKAGE* pPackage |
| 2072 | __out HANDLE* phSyncpointEvent | ||
| 2073 | ) | 2063 | ) |
| 2074 | { | 2064 | { |
| 2075 | AssertSz(pPackage->sczCacheId && *pPackage->sczCacheId, "AddCachePackageHelper() expects the package to have a cache id."); | 2065 | AssertSz(pPackage->sczCacheId && *pPackage->sczCacheId, "AddCachePackageHelper() expects the package to have a cache id."); |
| @@ -2083,8 +2073,7 @@ static HRESULT AddCachePackageHelper( | |||
| 2083 | ExitFunction(); | 2073 | ExitFunction(); |
| 2084 | } | 2074 | } |
| 2085 | 2075 | ||
| 2086 | BOOL fPlanned = AlreadyPlannedCachePackage(pPlan, pPackage->sczId, phSyncpointEvent); | 2076 | if (pPackage->hCacheEvent) // Only cache the package once. |
| 2087 | if (fPlanned) | ||
| 2088 | { | 2077 | { |
| 2089 | ExitFunction(); | 2078 | ExitFunction(); |
| 2090 | } | 2079 | } |
| @@ -2100,12 +2089,15 @@ static HRESULT AddCachePackageHelper( | |||
| 2100 | pCacheAction->type = BURN_CACHE_ACTION_TYPE_CHECKPOINT; | 2089 | pCacheAction->type = BURN_CACHE_ACTION_TYPE_CHECKPOINT; |
| 2101 | pCacheAction->checkpoint.dwId = dwCheckpoint; | 2090 | pCacheAction->checkpoint.dwId = dwCheckpoint; |
| 2102 | 2091 | ||
| 2103 | // Only plan the cache rollback if the package is also going to be uninstalled; | 2092 | if (!pPlan->fBundleAlreadyRegistered) |
| 2104 | // otherwise, future operations like repair will not be able to locate the cached package. | ||
| 2105 | BOOL fPlanCacheRollback = (BOOTSTRAPPER_ACTION_STATE_UNINSTALL == pPackage->rollback); | ||
| 2106 | |||
| 2107 | if (fPlanCacheRollback) | ||
| 2108 | { | 2093 | { |
| 2094 | // Create a package cache rollback action *before* the checkpoint. | ||
| 2095 | hr = AppendRollbackCacheAction(pPlan, &pCacheAction); | ||
| 2096 | ExitOnFailure(hr, "Failed to append rollback cache action."); | ||
| 2097 | |||
| 2098 | pCacheAction->type = BURN_CACHE_ACTION_TYPE_ROLLBACK_PACKAGE; | ||
| 2099 | pCacheAction->rollbackPackage.pPackage = pPackage; | ||
| 2100 | |||
| 2109 | hr = AppendRollbackCacheAction(pPlan, &pCacheAction); | 2101 | hr = AppendRollbackCacheAction(pPlan, &pCacheAction); |
| 2110 | ExitOnFailure(hr, "Failed to append rollback cache action."); | 2102 | ExitOnFailure(hr, "Failed to append rollback cache action."); |
| 2111 | 2103 | ||
| @@ -2124,7 +2116,10 @@ static HRESULT AddCachePackageHelper( | |||
| 2124 | pCacheAction->syncpoint.hEvent = ::CreateEventW(NULL, TRUE, FALSE, NULL); | 2116 | pCacheAction->syncpoint.hEvent = ::CreateEventW(NULL, TRUE, FALSE, NULL); |
| 2125 | ExitOnNullWithLastError(pCacheAction->syncpoint.hEvent, hr, "Failed to create syncpoint event."); | 2117 | ExitOnNullWithLastError(pCacheAction->syncpoint.hEvent, hr, "Failed to create syncpoint event."); |
| 2126 | 2118 | ||
| 2127 | *phSyncpointEvent = pCacheAction->syncpoint.hEvent; | 2119 | pPackage->hCacheEvent = pCacheAction->syncpoint.hEvent; |
| 2120 | |||
| 2121 | hr = PlanExecuteCacheSyncAndRollback(pPlan, pPackage); | ||
| 2122 | ExitOnFailure(hr, "Failed to plan package cache syncpoint"); | ||
| 2128 | 2123 | ||
| 2129 | pPackage->fPlannedCache = TRUE; | 2124 | pPackage->fPlannedCache = TRUE; |
| 2130 | if (pPackage->fCanAffectRegistration) | 2125 | if (pPackage->fCanAffectRegistration) |
| @@ -2142,7 +2137,6 @@ static HRESULT AddCacheSlipstreamMsps( | |||
| 2142 | ) | 2137 | ) |
| 2143 | { | 2138 | { |
| 2144 | HRESULT hr = S_OK; | 2139 | HRESULT hr = S_OK; |
| 2145 | HANDLE hIgnored = NULL; | ||
| 2146 | 2140 | ||
| 2147 | AssertSz(BURN_PACKAGE_TYPE_MSI == pPackage->type, "Only MSI packages can have slipstream patches."); | 2141 | AssertSz(BURN_PACKAGE_TYPE_MSI == pPackage->type, "Only MSI packages can have slipstream patches."); |
| 2148 | 2142 | ||
| @@ -2151,7 +2145,7 @@ static HRESULT AddCacheSlipstreamMsps( | |||
| 2151 | BURN_PACKAGE* pMspPackage = pPackage->Msi.rgSlipstreamMsps[i].pMspPackage; | 2145 | BURN_PACKAGE* pMspPackage = pPackage->Msi.rgSlipstreamMsps[i].pMspPackage; |
| 2152 | AssertSz(BURN_PACKAGE_TYPE_MSP == pMspPackage->type, "Only MSP packages can be slipstream patches."); | 2146 | AssertSz(BURN_PACKAGE_TYPE_MSP == pMspPackage->type, "Only MSP packages can be slipstream patches."); |
| 2153 | 2147 | ||
| 2154 | hr = AddCachePackageHelper(pPlan, pMspPackage, &hIgnored); | 2148 | hr = AddCachePackageHelper(pPlan, pMspPackage); |
| 2155 | ExitOnFailure(hr, "Failed to plan slipstream MSP: %ls", pMspPackage->sczId); | 2149 | ExitOnFailure(hr, "Failed to plan slipstream MSP: %ls", pMspPackage->sczId); |
| 2156 | } | 2150 | } |
| 2157 | 2151 | ||
| @@ -2159,36 +2153,6 @@ LExit: | |||
| 2159 | return hr; | 2153 | return hr; |
| 2160 | } | 2154 | } |
| 2161 | 2155 | ||
| 2162 | static BOOL AlreadyPlannedCachePackage( | ||
| 2163 | __in BURN_PLAN* pPlan, | ||
| 2164 | __in_z LPCWSTR wzPackageId, | ||
| 2165 | __out HANDLE* phSyncpointEvent | ||
| 2166 | ) | ||
| 2167 | { | ||
| 2168 | BOOL fPlanned = FALSE; | ||
| 2169 | |||
| 2170 | for (DWORD iCacheAction = 0; iCacheAction < pPlan->cCacheActions; ++iCacheAction) | ||
| 2171 | { | ||
| 2172 | BURN_CACHE_ACTION* pCacheAction = pPlan->rgCacheActions + iCacheAction; | ||
| 2173 | |||
| 2174 | if (BURN_CACHE_ACTION_TYPE_PACKAGE == pCacheAction->type) | ||
| 2175 | { | ||
| 2176 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, pCacheAction->package.pPackage->sczId, -1, wzPackageId, -1)) | ||
| 2177 | { | ||
| 2178 | if (iCacheAction + 1 < pPlan->cCacheActions && BURN_CACHE_ACTION_TYPE_SIGNAL_SYNCPOINT == pPlan->rgCacheActions[iCacheAction + 1].type) | ||
| 2179 | { | ||
| 2180 | *phSyncpointEvent = pPlan->rgCacheActions[iCacheAction + 1].syncpoint.hEvent; | ||
| 2181 | } | ||
| 2182 | |||
| 2183 | fPlanned = TRUE; | ||
| 2184 | break; | ||
| 2185 | } | ||
| 2186 | } | ||
| 2187 | } | ||
| 2188 | |||
| 2189 | return fPlanned; | ||
| 2190 | } | ||
| 2191 | |||
| 2192 | static DWORD GetNextCheckpointId( | 2156 | static DWORD GetNextCheckpointId( |
| 2193 | __in BURN_PLAN* pPlan | 2157 | __in BURN_PLAN* pPlan |
| 2194 | ) | 2158 | ) |
| @@ -2635,8 +2599,8 @@ static void ExecuteActionLog( | |||
| 2635 | LogStringLine(PlanDumpLevel, "%ls action[%u]: ROLLBACK_BOUNDARY id: %ls, vital: %ls", wzBase, iAction, pAction->rollbackBoundary.pRollbackBoundary->sczId, pAction->rollbackBoundary.pRollbackBoundary->fVital ? L"yes" : L"no"); | 2599 | LogStringLine(PlanDumpLevel, "%ls action[%u]: ROLLBACK_BOUNDARY id: %ls, vital: %ls", wzBase, iAction, pAction->rollbackBoundary.pRollbackBoundary->sczId, pAction->rollbackBoundary.pRollbackBoundary->fVital ? L"yes" : L"no"); |
| 2636 | break; | 2600 | break; |
| 2637 | 2601 | ||
| 2638 | case BURN_EXECUTE_ACTION_TYPE_WAIT_SYNCPOINT: | 2602 | case BURN_EXECUTE_ACTION_TYPE_WAIT_CACHE_PACKAGE: |
| 2639 | LogStringLine(PlanDumpLevel, "%ls action[%u]: WAIT_SYNCPOINT event handle: 0x%p", wzBase, iAction, pAction->syncpoint.hEvent); | 2603 | LogStringLine(PlanDumpLevel, "%ls action[%u]: WAIT_CACHE_PACKAGE id: %ls, event handle: 0x%p", wzBase, iAction, pAction->waitCachePackage.pPackage->sczId, pAction->waitCachePackage.pPackage->hCacheEvent); |
| 2640 | break; | 2604 | break; |
| 2641 | 2605 | ||
| 2642 | case BURN_EXECUTE_ACTION_TYPE_UNCACHE_PACKAGE: | 2606 | case BURN_EXECUTE_ACTION_TYPE_UNCACHE_PACKAGE: |
