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