Skip to content

Commit

Permalink
release GIL for the time of de/compression
Browse files Browse the repository at this point in the history
  • Loading branch information
vlaci committed May 7, 2023
1 parent 458145c commit 2dfee5d
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 7 deletions.
3 changes: 2 additions & 1 deletion lzokay-sys/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,6 @@ mod lzokay {
fn new_dict() -> UniquePtr<DictBase>;
}
}

pub use lzokay::*;

unsafe impl Send for DictBase {}
13 changes: 7 additions & 6 deletions src/lzallright.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ impl LZOCompressor {
let mut result = lzokay_sys::EResult::Error;
let mut compressed_size = 0usize;
let dst = PyByteArray::new_with(py, max_size, |dst| {
result = unsafe {
result = py.allow_threads(|| unsafe {
lzokay_sys::compress(
data.as_ptr(),
data.len(),
Expand All @@ -63,7 +63,7 @@ impl LZOCompressor {
&mut compressed_size,
self.dict.pin_mut(),
)
};
});
Ok(())
})?;
dst.resize(compressed_size)?;
Expand All @@ -82,15 +82,16 @@ impl LZOCompressor {
let mut result;
let dst = PyByteArray::new_with(py, size, |_| Ok(()))?;
loop {
result = unsafe {
let dst_bytes = unsafe { dst.as_bytes_mut() };
result = py.allow_threads(|| unsafe {
lzokay_sys::decompress(
data.as_ptr(),
data.len(),
dst.as_bytes_mut().as_mut_ptr(),
dst.len(),
dst_bytes.as_mut_ptr(),
dst_bytes.len(),
&mut decompressed_size,
)
};
});
if result == lzokay_sys::EResult::OutputOverrun {
dst.resize(2 * size)?;
continue;
Expand Down

0 comments on commit 2dfee5d

Please sign in to comment.