portable-service: fix set capture para dead lock

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages 2022-11-12 17:18:26 +08:00
parent bee19bfe17
commit 4d492cb2c6

View File

@ -469,17 +469,20 @@ pub mod client {
where where
Self: Sized, Self: Sized,
{ {
Self::set_para(CapturerPara { let mut option = SHMEM.lock().unwrap();
current_display, let shmem = option.as_mut().unwrap();
use_yuv, Self::set_para(
timeout_ms: 33, shmem,
}); CapturerPara {
current_display,
use_yuv,
timeout_ms: 33,
},
);
CapturerPortable {} CapturerPortable {}
} }
fn set_para(para: CapturerPara) { fn set_para(shmem: &mut SharedMemory, para: CapturerPara) {
let mut option = SHMEM.lock().unwrap();
let shmem = option.as_mut().unwrap();
let para_ptr = &para as *const CapturerPara as *const u8; let para_ptr = &para as *const CapturerPara as *const u8;
let para_data; let para_data;
unsafe { unsafe {
@ -497,11 +500,14 @@ pub mod client {
let para_ptr = shmem.as_ptr().add(ADDR_CAPTURER_PARA); let para_ptr = shmem.as_ptr().add(ADDR_CAPTURER_PARA);
let para = para_ptr as *const CapturerPara; let para = para_ptr as *const CapturerPara;
if use_yuv != (*para).use_yuv { if use_yuv != (*para).use_yuv {
Self::set_para(CapturerPara { Self::set_para(
current_display: (*para).current_display, shmem,
use_yuv, CapturerPara {
timeout_ms: (*para).timeout_ms, current_display: (*para).current_display,
}); use_yuv,
timeout_ms: (*para).timeout_ms,
},
);
} }
} }
} }
@ -514,11 +520,14 @@ pub mod client {
let para_ptr = base.add(ADDR_CAPTURER_PARA); let para_ptr = base.add(ADDR_CAPTURER_PARA);
let para = para_ptr as *const CapturerPara; let para = para_ptr as *const CapturerPara;
if timeout.as_millis() != (*para).timeout_ms as _ { if timeout.as_millis() != (*para).timeout_ms as _ {
Self::set_para(CapturerPara { Self::set_para(
current_display: (*para).current_display, shmem,
use_yuv: (*para).use_yuv, CapturerPara {
timeout_ms: timeout.as_millis() as _, current_display: (*para).current_display,
}); use_yuv: (*para).use_yuv,
timeout_ms: timeout.as_millis() as _,
},
);
} }
if utils::counter_ready(base.add(ADDR_CAPTURE_FRAME_COUNTER)) { if utils::counter_ready(base.add(ADDR_CAPTURE_FRAME_COUNTER)) {
let frame_len_ptr = base.add(ADDR_CAPTURE_FRAME_SIZE); let frame_len_ptr = base.add(ADDR_CAPTURE_FRAME_SIZE);