mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-19 02:41:10 +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:
@@ -332,12 +332,16 @@ pub mod unix_file_clip {
|
||||
log::debug!("format data response: msg_flags: {}", msg_flags);
|
||||
|
||||
if msg_flags != 0x1 {
|
||||
// return failure message?
|
||||
log::error!(
|
||||
"peer reported clipboard format data failure: {}",
|
||||
msg_flags
|
||||
);
|
||||
return vec![];
|
||||
}
|
||||
|
||||
log::debug!("parsing file descriptors");
|
||||
if fuse::init_fuse_context(true).is_ok() {
|
||||
match fuse::format_data_response_to_urls(
|
||||
match fuse::init_fuse_context(side == ClipboardSide::Client) {
|
||||
Ok(()) => match fuse::format_data_response_to_urls(
|
||||
side == ClipboardSide::Client,
|
||||
format_data,
|
||||
conn_id,
|
||||
@@ -348,9 +352,10 @@ pub mod unix_file_clip {
|
||||
Err(e) => {
|
||||
log::error!("failed to parse file descriptors: {:?}", e);
|
||||
}
|
||||
},
|
||||
Err(e) => {
|
||||
log::error!("failed to initialize clipboard FUSE context: {:?}", e);
|
||||
}
|
||||
} else {
|
||||
// send error message to server
|
||||
}
|
||||
}
|
||||
ClipboardFile::FileContentsRequest {
|
||||
@@ -386,6 +391,7 @@ pub mod unix_file_clip {
|
||||
ClipboardFile::FileContentsResponse {
|
||||
msg_flags,
|
||||
stream_id,
|
||||
requested_data,
|
||||
..
|
||||
} => {
|
||||
log::debug!(
|
||||
@@ -393,13 +399,15 @@ pub mod unix_file_clip {
|
||||
msg_flags,
|
||||
stream_id,
|
||||
);
|
||||
if fuse::init_fuse_context(true).is_ok() {
|
||||
hbb_common::allow_err!(fuse::handle_file_content_response(
|
||||
side == ClipboardSide::Client,
|
||||
clip
|
||||
));
|
||||
} else {
|
||||
// send error message to server
|
||||
let response = ClipboardFile::FileContentsResponse {
|
||||
msg_flags,
|
||||
stream_id,
|
||||
requested_data,
|
||||
};
|
||||
if let Err(e) =
|
||||
fuse::handle_file_content_response(side == ClipboardSide::Client, response)
|
||||
{
|
||||
log::error!("failed to handle file contents response: {:?}", e);
|
||||
}
|
||||
}
|
||||
ClipboardFile::NotifyCallback {
|
||||
|
||||
Reference in New Issue
Block a user