Fix macOS shared memory filename length limit (fixes issue #92) (#93)

* Fix macOS shared memory filename length limit

Shorten shared memory object names from "__tdf_kittage_{pid}_page_{rn}_{page_num}"
to "tdf_{pid}_{rn}_{page_num}" and change timestamp from nanoseconds to
milliseconds % 1M to stay under macOS's 31-character limit for shm names.

Fixes "File name too long (os error 63)" error when rendering PDFs on macOS.

On macOS, SHM_NAME_MAX: 30

* Fix macOS shared memory filename length limit

Shorten shared memory object names from "__tdf_kittage_{pid}_page_{rn}_{page_num}"
to "tdf_{pid}_{rn}_{page_num}" and change timestamp from nanoseconds to
milliseconds % 1M to stay under macOS's 31-character limit for shm names.

Fixes "File name too long (os error 63)" error when rendering PDFs on macOS.

SHM_NAME_MAX: 30
This commit is contained in:
Per Hurtig
2025-08-18 17:15:19 +02:00
committed by GitHub
parent e65472e571
commit 7c2c6484a6
2 changed files with 6 additions and 8 deletions
+5 -6
View File
@@ -139,14 +139,13 @@ pub async fn run_conversion_loop(
let rn = SystemTime::now() let rn = SystemTime::now()
.duration_since(UNIX_EPOCH) .duration_since(UNIX_EPOCH)
.unwrap_or_default() .unwrap_or_default()
.as_nanos(); .as_millis() % 1_000_000;
let mut img = if shms_work { let mut img = if shms_work {
kittage::image::Image::shm_from( kittage::image::Image::shm_from(dyn_img, &format!("tdf_{pid}_{rn}_{page_num}"))
dyn_img, .map_err(|e| {
&format!("__tdf_kittage_{pid}_page_{rn}_{page_num}") RenderError::Converting(format!("Couldn't write to shm: {e}"))
) })?
.map_err(|e| RenderError::Converting(format!("Couldn't write to shm: {e}")))?
} else { } else {
kittage::image::Image::from(dyn_img) kittage::image::Image::from(dyn_img)
}; };
+1 -2
View File
@@ -78,8 +78,7 @@ pub async fn run_action<'image, 'data, 'es>(
pub async fn do_shms_work(ev_stream: &mut EventStream) -> bool { pub async fn do_shms_work(ev_stream: &mut EventStream) -> bool {
let img = DynamicImage::new_rgb8(1, 1); let img = DynamicImage::new_rgb8(1, 1);
let pid = std::process::id(); let pid = std::process::id();
let Ok(mut k_img) = kittage::image::Image::shm_from(img, &format!("__tdf_kittage_test_{pid}")) let Ok(mut k_img) = kittage::image::Image::shm_from(img, &format!("tdf_test_{pid}")) else {
else {
return false; return false;
}; };