From f537e514af5aca4940672a6f26a461e7cdcca328 Mon Sep 17 00:00:00 2001 From: lars-berger Date: Wed, 29 Jan 2025 01:30:34 +0800 Subject: [PATCH 1/2] fix: ensure com cleanup is run --- packages/wm-platform/src/com.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/wm-platform/src/com.rs b/packages/wm-platform/src/com.rs index 774cef11..4ca7ca68 100644 --- a/packages/wm-platform/src/com.rs +++ b/packages/wm-platform/src/com.rs @@ -96,6 +96,11 @@ impl Default for ComInit { impl Drop for ComInit { fn drop(&mut self) { + // Explicitly drop COM interfaces first. + drop(self.taskbar_list.take()); + drop(self.application_view_collection.take()); + drop(self.service_provider.take()); + unsafe { CoUninitialize() }; } } From b43ef51933f73e6b9f591b834caf757578973fcf Mon Sep 17 00:00:00 2001 From: lars-berger Date: Wed, 29 Jan 2025 02:04:56 +0800 Subject: [PATCH 2/2] avoid clones --- packages/wm-platform/src/com.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/wm-platform/src/com.rs b/packages/wm-platform/src/com.rs index 4ca7ca68..666395dd 100644 --- a/packages/wm-platform/src/com.rs +++ b/packages/wm-platform/src/com.rs @@ -63,27 +63,27 @@ impl ComInit { } /// Returns an instance of `IServiceProvider`. - pub fn service_provider(&self) -> anyhow::Result { + pub fn service_provider(&self) -> anyhow::Result<&IServiceProvider> { self .service_provider - .clone() + .as_ref() .context("Unable to create `IServiceProvider` instance.") } /// Returns an instance of `IApplicationViewCollection`. pub fn application_view_collection( &self, - ) -> anyhow::Result { - self.application_view_collection.clone().context( + ) -> anyhow::Result<&IApplicationViewCollection> { + self.application_view_collection.as_ref().context( "Failed to query for `IApplicationViewCollection` instance.", ) } /// Returns an instance of `ITaskbarList2`. - pub fn taskbar_list(&self) -> anyhow::Result { + pub fn taskbar_list(&self) -> anyhow::Result<&ITaskbarList2> { self .taskbar_list - .clone() + .as_ref() .context("Unable to create `ITaskbarList2` instance.") } }