winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Msrc/Microsoft.Management.Deployment/PackageCatalog.cpp | 1+
Msrc/Microsoft.Management.Deployment/PackageCatalogReference.cpp | 1+
Msrc/Microsoft.Management.Deployment/PackageManager.cpp | 2++
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();