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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjyzpGWECyKSBWz5DtkTGz
This commit is contained in:
2026-09-15 23:07:27 +02:00
co-authored by Claude Sonnet 5
parent fa1592e18e
commit c8c3409b98
+10 -1
View File
@@ -126,7 +126,16 @@ async fn switch_to(
old_active: Option<Side>,
) -> 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