diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-06-09 11:30:46 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-06-09 13:47:53 -0500 |
commit | 56105916271ff9a7c0bfa237b45b9b3fab9c570b (patch) | |
tree | 828aff9543e541b42ed45198e6bd3e0aa065c137 /src/burn/engine/burnextension.cpp | |
parent | d47c73dbcd0a314cf3346b9b1294063ed4a124c4 (diff) | |
download | wix-56105916271ff9a7c0bfa237b45b9b3fab9c570b.tar.gz wix-56105916271ff9a7c0bfa237b45b9b3fab9c570b.tar.bz2 wix-56105916271ff9a7c0bfa237b45b9b3fab9c570b.zip |
Fix building and perf for bundles with 1000s of package and BA payloads
Fixes other half of #5300
Diffstat (limited to 'src/burn/engine/burnextension.cpp')
-rw-r--r-- | src/burn/engine/burnextension.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/burn/engine/burnextension.cpp b/src/burn/engine/burnextension.cpp index 475df1c5..ee4b1542 100644 --- a/src/burn/engine/burnextension.cpp +++ b/src/burn/engine/burnextension.cpp | |||
@@ -26,6 +26,7 @@ EXTERN_C HRESULT BurnExtensionParseFromXml( | |||
26 | IXMLDOMNodeList* pixnNodes = NULL; | 26 | IXMLDOMNodeList* pixnNodes = NULL; |
27 | IXMLDOMNode* pixnNode = NULL; | 27 | IXMLDOMNode* pixnNode = NULL; |
28 | DWORD cNodes = 0; | 28 | DWORD cNodes = 0; |
29 | LPWSTR scz = NULL; | ||
29 | 30 | ||
30 | // Select BundleExtension nodes. | 31 | // Select BundleExtension nodes. |
31 | hr = XmlSelectNodes(pixnBundle, L"BundleExtension", &pixnNodes); | 32 | hr = XmlSelectNodes(pixnBundle, L"BundleExtension", &pixnNodes); |
@@ -59,11 +60,11 @@ EXTERN_C HRESULT BurnExtensionParseFromXml( | |||
59 | ExitOnFailure(hr, "Failed to get @Id."); | 60 | ExitOnFailure(hr, "Failed to get @Id."); |
60 | 61 | ||
61 | // @EntryPayloadId | 62 | // @EntryPayloadId |
62 | hr = XmlGetAttributeEx(pixnNode, L"EntryPayloadId", &pExtension->sczEntryPayloadId); | 63 | hr = XmlGetAttributeEx(pixnNode, L"EntryPayloadSourcePath", &scz); |
63 | ExitOnFailure(hr, "Failed to get @EntryPayloadId."); | 64 | ExitOnFailure(hr, "Failed to get @EntryPayloadSourcePath."); |
64 | 65 | ||
65 | hr = PayloadFindById(pBaPayloads, pExtension->sczEntryPayloadId, &pExtension->pEntryPayload); | 66 | hr = PayloadFindEmbeddedBySourcePath(pBaPayloads->sdhPayloads, scz, &pExtension->pEntryPayload); |
66 | ExitOnFailure(hr, "Failed to find BundleExtension EntryPayload '%ls'.", pExtension->sczEntryPayloadId); | 67 | ExitOnFailure(hr, "Failed to find BundleExtension EntryPayload '%ls'.", pExtension->sczId); |
67 | 68 | ||
68 | // prepare next iteration | 69 | // prepare next iteration |
69 | ReleaseNullObject(pixnNode); | 70 | ReleaseNullObject(pixnNode); |
@@ -72,6 +73,7 @@ EXTERN_C HRESULT BurnExtensionParseFromXml( | |||
72 | hr = S_OK; | 73 | hr = S_OK; |
73 | 74 | ||
74 | LExit: | 75 | LExit: |
76 | ReleaseStr(scz); | ||
75 | ReleaseObject(pixnNode); | 77 | ReleaseObject(pixnNode); |
76 | ReleaseObject(pixnNodes); | 78 | ReleaseObject(pixnNodes); |
77 | 79 | ||
@@ -92,7 +94,6 @@ EXTERN_C void BurnExtensionUninitialize( | |||
92 | { | 94 | { |
93 | BURN_EXTENSION* pExtension = &pBurnExtensions->rgExtensions[i]; | 95 | BURN_EXTENSION* pExtension = &pBurnExtensions->rgExtensions[i]; |
94 | 96 | ||
95 | ReleaseStr(pExtension->sczEntryPayloadId); | ||
96 | ReleaseStr(pExtension->sczId); | 97 | ReleaseStr(pExtension->sczId); |
97 | } | 98 | } |
98 | MemFree(pBurnExtensions->rgExtensions); | 99 | MemFree(pBurnExtensions->rgExtensions); |