diff --git a/libs/hbb_common b/libs/hbb_common index 9ede5d49f..81b932b7b 160000 --- a/libs/hbb_common +++ b/libs/hbb_common @@ -1 +1 @@ -Subproject commit 9ede5d49f65b8c513fe613dbfea2daf7694cba3e +Subproject commit 81b932b7bfa2ff8bc60189625fd6538db2fa9ea1 diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 31810644e..8d858e5df 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1544,7 +1544,13 @@ impl Remote { job.modify_time(); err = job.job_error(); job_type = job.r#type; - printer_data = job.get_buf_data(); + printer_data = match job.get_buf_data().await { + Ok(d) => d, + Err(e) => { + log::error!("Failed to get the printer data: {}", e); + None + } + }; } match job_type { fs::JobType::Generic => { @@ -1552,10 +1558,10 @@ impl Remote { } fs::JobType::Printer => { if let Some(err) = err { - log::error!("Received printer job failed, error {err}"); + log::error!("Receive print job failed, error {err}"); } else { log::info!( - "Received printer job done, data len: {:?}", + "Receive print job done, data len: {:?}", printer_data.as_ref().map(|d| d.len()).unwrap_or(0) ); #[cfg(target_os = "windows")] diff --git a/src/server/printer_service.rs b/src/server/printer_service.rs index 268429a58..1bf944b9d 100644 --- a/src/server/printer_service.rs +++ b/src/server/printer_service.rs @@ -17,6 +17,8 @@ pub type Uninit = fn(); // data: The raw prn data, xps format. // data_len: The length of the raw prn data. pub type GetPrnData = fn(dur_mills: u32, data: *mut *mut i8, data_len: *mut u32); +// Free the prn data allocated by GetPrnData(). +pub type FreePrnData = fn(data: *mut i8); macro_rules! make_lib_wrapper { ($($field:ident : $tp:ty),+) => { @@ -78,7 +80,8 @@ macro_rules! make_lib_wrapper { make_lib_wrapper!( init: Init, uninit: Uninit, - get_prn_data: GetPrnData + get_prn_data: GetPrnData, + free_prn_data: FreePrnData ); lazy_static::lazy_static! { @@ -135,9 +138,7 @@ fn get_prn_data(dur_mills: u32) -> ResultType> { } let bytes = Vec::from(unsafe { std::slice::from_raw_parts(data as *const u8, data_len as usize) }); - unsafe { - hbb_common::libc::free(data as *mut std::ffi::c_void); - } + lib_wrapper.free_prn_data.map(|f| f(data)); Ok(bytes) } else { bail!("Failed to load func get_prn_file");