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:
+10
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user