mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-07-02 13:25:01 +03:00
fix(fuse): umount (#15426)
* fix(clipboard): clean up stale Linux FUSE mounts Recover Linux file clipboard FUSE mount points before remounting and stop treating a cached context as valid when the mount has already gone away. This fixes the desktop file manager copy failure that shows dialogs such as "Error while copying a" and "There was an error copying the file into xxx". Signed-off-by: fufesou <linlong1266@gmail.com> * fix(clipboard): fuse, reduce dups Signed-off-by: fufesou <linlong1266@gmail.com> * fix: clear Linux file clipboard before unmounting FUSE Ensure Linux client teardown clears RustDesk file clipboard URLs while the FUSE context is still available. Also prefer fusermount before umount to avoid noisy unprivileged teardown attempts. Signed-off-by: fufesou <linlong1266@gmail.com> * fix(clipboard): return and log errors Signed-off-by: fufesou <linlong1266@gmail.com> --------- Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
@@ -941,21 +941,23 @@ impl Client {
|
||||
|
||||
#[cfg(not(target_os = "ios"))]
|
||||
fn try_stop_clipboard() {
|
||||
// There's a bug here.
|
||||
// If session is closed by the peer, `has_sessions_running()` will always return true.
|
||||
// It's better to check if the active session number.
|
||||
// But it's not a problem, because the clipboard thread does not consume CPU.
|
||||
//
|
||||
// If we want to fix it, we can add a flag to indicate if session is active.
|
||||
// But I think it's not necessary to introduce complexity at this point.
|
||||
// Disconnected Flutter sessions may keep UI handlers alive, so only connected sessions
|
||||
// should block clipboard cleanup.
|
||||
#[cfg(feature = "flutter")]
|
||||
if crate::flutter::sessions::has_sessions_running(ConnType::DEFAULT_CONN) {
|
||||
if crate::flutter::sessions::has_connected_sessions_running(ConnType::DEFAULT_CONN) {
|
||||
return;
|
||||
}
|
||||
#[cfg(not(target_os = "android"))]
|
||||
clipboard_listener::unsubscribe(Self::CLIENT_CLIPBOARD_NAME);
|
||||
CLIPBOARD_STATE.lock().unwrap().running = false;
|
||||
#[cfg(all(feature = "unix-file-copy-paste", target_os = "linux"))]
|
||||
if let Err(e) = crate::clipboard::try_empty_clipboard_files_sync(
|
||||
crate::clipboard::ClipboardSide::Client,
|
||||
0,
|
||||
) {
|
||||
log::error!("Failed to empty client clipboard files: {}", e);
|
||||
}
|
||||
#[cfg(all(feature = "unix-file-copy-paste", target_os = "linux"))]
|
||||
clipboard::platform::unix::fuse::uninit_fuse_context(true);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user