diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index cba3c0ca3..975abf80a 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -399,10 +399,10 @@ impl Config2 { pub fn load_path( file: PathBuf, ) -> T { - let cfg = match confy::load_path(file) { + let cfg = match confy::load_path(&file) { Ok(config) => config, Err(err) => { - log::error!("Failed to load config: {}", err); + log::error!("Failed to load config '{}': {}", file.display(), err); T::default() } }; @@ -958,7 +958,7 @@ impl PeerConfig { config } Err(err) => { - log::error!("Failed to load config: {}", err); + log::error!("Failed to load peer config '{}': {}", id, err); Default::default() } } diff --git a/libs/scrap/Cargo.toml b/libs/scrap/Cargo.toml index ffce4ab97..4956403a9 100644 --- a/libs/scrap/Cargo.toml +++ b/libs/scrap/Cargo.toml @@ -15,7 +15,6 @@ mediacodec = ["ndk"] linux-pkg-config = ["dep:pkg-config"] [dependencies] -block = "0.1" cfg-if = "1.0" num_cpus = "1.15" lazy_static = "1.4" @@ -27,6 +26,9 @@ version = "0.3" default-features = true features = ["dxgi", "dxgi1_2", "dxgi1_5", "d3d11", "winuser", "winerror", "errhandlingapi", "libloaderapi"] +[target.'cfg(target_os = "macos")'.dependencies] +block = "0.1" + [target.'cfg(target_os = "android")'.dependencies] android_logger = "0.13" jni = "0.21" diff --git a/src/server/video_service.rs b/src/server/video_service.rs index 9478a19f0..9d6968c99 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -503,7 +503,7 @@ fn run(sp: GenericService) -> ResultType<()> { #[cfg(not(any(target_os = "android", target_os = "ios")))] let _wake_lock = get_wake_lock(); - // ensure_inited() is needed because release_resource() may be called. + // ensure_inited() is needed because clear() may be called. #[cfg(target_os = "linux")] super::wayland::ensure_inited()?; #[cfg(windows)] @@ -623,6 +623,8 @@ fn run(sp: GenericService) -> ResultType<()> { bail!("SWITCH"); } if c.current != *CURRENT_DISPLAY.lock().unwrap() { + #[cfg(target_os = "linux")] + super::wayland::clear(); *SWITCH.lock().unwrap() = true; bail!("SWITCH"); } @@ -657,6 +659,8 @@ fn run(sp: GenericService) -> ResultType<()> { if let Some(msg_out) = check_get_displays_changed_msg() { sp.send(msg_out); log::info!("Displays changed"); + #[cfg(target_os = "linux")] + super::wayland::clear(); *SWITCH.lock().unwrap() = true; bail!("SWITCH"); } @@ -725,7 +729,7 @@ fn run(sp: GenericService) -> ResultType<()> { // Do not reset the capturer for now, as it will cause the prompt to show every few minutes. // https://github.com/rustdesk/rustdesk/issues/4276 // - // super::wayland::release_resource(); + // super::wayland::clear(); // bail!("Wayland capturer none 100 times, try restart capture"); } } @@ -734,6 +738,8 @@ fn run(sp: GenericService) -> ResultType<()> { Err(err) => { if check_display_changed(c.ndisplay, c.current, c.width, c.height) { log::info!("Displays changed"); + #[cfg(target_os = "linux")] + super::wayland::clear(); *SWITCH.lock().unwrap() = true; bail!("SWITCH"); } @@ -778,9 +784,7 @@ fn run(sp: GenericService) -> ResultType<()> { } #[cfg(target_os = "linux")] - if !scrap::is_x11() { - super::wayland::release_resource(); - } + super::wayland::clear(); Ok(()) } diff --git a/src/server/wayland.rs b/src/server/wayland.rs index 10b93afce..efed83936 100644 --- a/src/server/wayland.rs +++ b/src/server/wayland.rs @@ -186,21 +186,6 @@ pub(super) async fn check_init() -> ResultType<()> { Ok(()) } -pub fn clear() { - if scrap::is_x11() { - return; - } - - let mut lock = CAP_DISPLAY_INFO.write().unwrap(); - if *lock != 0 { - unsafe { - let cap_display_info = Box::from_raw(*lock as *mut CapDisplayInfo); - let _ = Box::from_raw(cap_display_info.capturer.0); - } - *lock = 0; - } -} - pub(super) async fn get_displays() -> ResultType<(usize, Vec)> { check_init().await?; let addr = *CAP_DISPLAY_INFO.read().unwrap(); @@ -230,8 +215,7 @@ pub(super) fn get_primary() -> ResultType { } } -#[allow(dead_code)] -pub(super) fn release_resource() { +pub fn clear() { if scrap::is_x11() { return; }