* comments

Signed-off-by: fufesou <linlong1266@gmail.com>

* comments

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
fufesou 2024-09-08 23:07:42 +08:00 committed by GitHub
parent 2922ebe22a
commit a2792d1527
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 3 deletions

View File

@ -272,6 +272,15 @@ impl ClipboardContext {
}
fn get_formats(&mut self, formats: &[ClipboardFormat]) -> ResultType<Vec<ClipboardData>> {
// If there're multiple threads or processes trying to access the clipboard at the same time,
// the previous clipboard owner will fail to access the clipboard.
// `GetLastError()` will return `ERROR_CLIPBOARD_NOT_OPEN` (OSError(1418): Thread does not have a clipboard open) at this time.
// See https://github.com/rustdesk-org/arboard/blob/747ab2d9b40a5c9c5102051cf3b0bb38b4845e60/src/platform/windows.rs#L34
//
// This is a common case on Windows, so we retry here.
// Related issues:
// https://github.com/rustdesk/rustdesk/issues/9263
// https://github.com/rustdesk/rustdesk/issues/9222#issuecomment-2329233175
for i in 0..CLIPBOARD_GET_MAX_RETRY {
match self.inner.get_formats(SUPPORTED_FORMATS) {
Ok(data) => {

View File

@ -131,9 +131,12 @@ impl Handler {
check_clipboard(&mut self.ctx, ClipboardSide::Host, false)
}
// It's ok to do async operation in the clipboard service because:
// 1. the clipboard is not used frequently.
// 2. the clipboard handle is sync and will not block the main thread.
// Read clipboard data from cm using ipc.
//
// We cannot use `#[tokio::main(flavor = "current_thread")]` here,
// because the auto-managed tokio runtime (async context) will be dropped after the call.
// The next call will create a new runtime, which will cause the previous stream to be unusable.
// So we need to manage the tokio runtime manually.
#[cfg(windows)]
fn read_clipboard_from_cm_ipc(&mut self) -> ResultType<Vec<ClipboardNonFile>> {
if self.rt.is_none() {