commit 4d6d9e1a9aecf1ce2dc66eb806bf9dbdea8a9489
parent fef5a7fadd0636dcdc8e62b92d4c83f389f7aea8
Author: JohnMcPMS <johnmcp@microsoft.com>
Date: Wed, 12 Feb 2025 15:49:36 -0800
For truly async calls we must maintain our lifetime (#5199)
## Change
Add forgotten lifetime extension for async function.
## Validation
Changed the sample caller to call `FindPackagesAsync`, then destroy the
catalog object.
Diffstat:
3 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/src/Microsoft.Management.Deployment/PackageCatalog.cpp b/src/Microsoft.Management.Deployment/PackageCatalog.cpp
@@ -47,6 +47,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation
}
winrt::Windows::Foundation::IAsyncOperation<winrt::Microsoft::Management::Deployment::FindPackagesResult> PackageCatalog::FindPackagesAsync(winrt::Microsoft::Management::Deployment::FindPackagesOptions options)
{
+ auto strong_this = get_strong();
co_await resume_background();
co_return FindPackages(options);
}
diff --git a/src/Microsoft.Management.Deployment/PackageCatalogReference.cpp b/src/Microsoft.Management.Deployment/PackageCatalogReference.cpp
@@ -311,6 +311,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation
// Check for permissions and get caller info for telemetry
THROW_IF_FAILED(EnsureComCallerHasCapability(Capability::PackageQuery));
+ auto strong_this = get_strong();
auto report_progress{ co_await winrt::get_progress_token() };
co_await winrt::resume_background();
diff --git a/src/Microsoft.Management.Deployment/PackageManager.cpp b/src/Microsoft.Management.Deployment/PackageManager.cpp
@@ -1329,6 +1329,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation
::AppInstaller::Repository::Source sourceToAdd = CreateSourceFromOptions(options);
+ auto strong_this = get_strong();
auto report_progress{ co_await winrt::get_progress_token() };
co_await winrt::resume_background();
@@ -1367,6 +1368,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation
auto matchingSource = GetMatchingSource(winrt::to_string(options.Name()));
THROW_HR_IF(APPINSTALLER_CLI_ERROR_SOURCE_NAME_DOES_NOT_EXIST, !matchingSource.has_value());
+ auto strong_this = get_strong();
auto report_progress{ co_await winrt::get_progress_token() };
co_await winrt::resume_background();