From c8c3409b98fc68a79545dc29b8113f59cbaea523 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Tue, 15 Sep 2026 23:07:27 +0200 Subject: [PATCH] Fix: switch_to() haengt bei fehlgeschlagener Symlink-Aktivierung wieder aus Schlug target::activate_symlink() nach dem Mounten der neuen Seite fehl, blieb diese neu gemountete Seite unbemerkt gemountet: der sichtbare Symlink zeigt weiterhin auf old_active, wodurch der naechste Reconcile-Durchlauf new_side nie wieder aushaengt - ein dauerhaft verwaister Mount. switch_to() haengt die neue Seite jetzt wieder aus, falls die Symlink-Aktivierung fehlschlaegt, bevor der Fehler weitergereicht wird. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01LjyzpGWECyKSBWz5DtkTGz --- src/reconcile/mod.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/reconcile/mod.rs b/src/reconcile/mod.rs index ae7a59a..bdb67f8 100644 --- a/src/reconcile/mod.rs +++ b/src/reconcile/mod.rs @@ -126,7 +126,16 @@ async fn switch_to( old_active: Option, ) -> Result<()> { mount_side(pair, settings, new_side, creds).await?; - target::activate_symlink(pair, new_side)?; + + // Falls das Aktivieren des Symlinks fehlschlägt, muss die gerade gemountete `new_side` + // wieder ausgehängt werden, statt sie unbemerkt gemountet zu lassen: der nächste + // Reconcile-Durchlauf sähe sonst weiterhin `old_active` als aktive Seite (der Symlink zeigt + // ja weiter darauf) und würde `new_side` nie wieder aushängen - ein dauerhaft verwaister + // Mount. + if let Err(e) = target::activate_symlink(pair, new_side) { + let _ = unmount_side(pair, settings, new_side).await; + return Err(e); + } if let Some(old_side) = old_active && old_side != new_side