aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/plan.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-05-04 19:25:07 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-05-11 19:11:19 -0500
commit27c6decae94536cae338731b6cb765aa92776486 (patch)
treecabfb05464fdc64e30597da28a54113fc3a62da1 /src/burn/engine/plan.cpp
parenta2f2036c8598efcb434eebeeacd7ede84ab60dfe (diff)
downloadwix-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.cpp128
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 );
61static HRESULT ProcessPackageRollbackBoundary( 60static HRESULT ProcessPackageRollbackBoundary(
@@ -77,23 +76,16 @@ static HRESULT AddRegistrationAction(
77 ); 76 );
78static HRESULT AddCachePackage( 77static 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 );
83static HRESULT AddCachePackageHelper( 81static 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 );
88static HRESULT AddCacheSlipstreamMsps( 85static HRESULT AddCacheSlipstreamMsps(
89 __in BURN_PLAN* pPlan, 86 __in BURN_PLAN* pPlan,
90 __in BURN_PACKAGE* pPackage 87 __in BURN_PACKAGE* pPackage
91 ); 88 );
92static BOOL AlreadyPlannedCachePackage(
93 __in BURN_PLAN* pPlan,
94 __in_z LPCWSTR wzPackageId,
95 __out HANDLE* phSyncpointEvent
96 );
97static DWORD GetNextCheckpointId( 89static 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
1584extern "C" HRESULT PlanExecuteCacheSyncAndRollback( 1573extern "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
1608LExit: 1599LExit:
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
2047static HRESULT AddCachePackage( 2039static 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
2065LExit: 2056LExit:
@@ -2068,8 +2059,7 @@ LExit:
2068 2059
2069static HRESULT AddCachePackageHelper( 2060static 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
2162static 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
2192static DWORD GetNextCheckpointId( 2156static 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: