aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/src/core
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2026-03-18 11:52:18 +0800
committerGitHub <noreply@github.com>2026-03-18 11:52:18 +0800
commitaff0903f625a2184d6d96e47b10041d741e59b4d (patch)
tree3c44be13d49aee7a4cab56091fc0d8f0ecfb24a0 /src-tauri/src/core
parent983c1dabd044d908540cbbdbc2c8d22cc36f5a82 (diff)
downloadDropOut-aff0903f625a2184d6d96e47b10041d741e59b4d.tar.gz
DropOut-aff0903f625a2184d6d96e47b10041d741e59b4d.zip
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Diffstat (limited to 'src-tauri/src/core')
-rw-r--r--src-tauri/src/core/instance.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/src-tauri/src/core/instance.rs b/src-tauri/src/core/instance.rs
index 2646d2b..0272d09 100644
--- a/src-tauri/src/core/instance.rs
+++ b/src-tauri/src/core/instance.rs
@@ -448,7 +448,25 @@ impl InstanceState {
new_name: String,
app_handle: &AppHandle,
) -> Result<Instance, String> {
+ // Local RAII guard to ensure end_operation is always called
+ struct OperationGuard<'a> {
+ manager: &'a InstanceManager,
+ id: &'a str,
+ }
+
+ impl<'a> Drop for OperationGuard<'a> {
+ fn drop(&mut self) {
+ // This will run on all exit paths from duplicate_instance
+ self.manager.end_operation(self.id);
+ }
+ }
+
self.begin_operation(id, InstanceOperation::ImportExport)?;
+ let _operation_guard = OperationGuard {
+ manager: self,
+ id,
+ };
+
let source_instance = self
.get_instance(id)
.ok_or_else(|| format!("Instance {} not found", id))?;
@@ -493,7 +511,6 @@ impl InstanceState {
};
self.insert_instance(new_instance.clone(), false)?;
- self.end_operation(id);
Ok(new_instance)
}