diskann_platform/win/
thread_safe_handle.rs1use std::{
7 io,
8 sync::{Mutex, MutexGuard},
9};
10
11use windows_sys::Win32::Foundation::HANDLE;
12
13pub struct ThreadSafeHandle(Mutex<HANDLE>);
15
16unsafe impl Send for ThreadSafeHandle {}
18unsafe impl Sync for ThreadSafeHandle {}
19
20impl ThreadSafeHandle {
21 pub fn lock(&self) -> io::Result<MutexGuard<'_, HANDLE>> {
23 self.0.lock().map_err(|_| {
24 io::Error::new(
25 io::ErrorKind::WouldBlock,
26 "Unable to acquire lock on ThreadSafeHandle.",
27 )
28 })
29 }
30
31 pub fn new(handle: HANDLE) -> Self {
33 Self(Mutex::new(handle))
34 }
35}