Vendor dependencies
Let's see how I like this workflow.
This commit is contained in:
parent
34d1830413
commit
9c435dc440
7500 changed files with 1665121 additions and 99 deletions
41
vendor/crossterm_winapi/src/semaphore.rs
vendored
Normal file
41
vendor/crossterm_winapi/src/semaphore.rs
vendored
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
use std::{io, ptr};
|
||||
|
||||
use winapi::um::synchapi::{CreateSemaphoreW, ReleaseSemaphore};
|
||||
|
||||
use crate::{nonnull_handle_result, result, Handle};
|
||||
|
||||
/// A [Windows semaphore](https://docs.microsoft.com/en-us/windows/win32/sync/semaphore-objects).
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Semaphore(Handle);
|
||||
|
||||
impl Semaphore {
|
||||
/// Construct a new semaphore.
|
||||
///
|
||||
/// This wraps
|
||||
/// [`CreateSemaphoreW`](https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-createsemaphorew).
|
||||
pub fn new() -> io::Result<Self> {
|
||||
let handle = nonnull_handle_result(unsafe {
|
||||
CreateSemaphoreW(ptr::null_mut(), 0, 1, ptr::null_mut())
|
||||
})?;
|
||||
|
||||
let handle = unsafe { Handle::from_raw(handle) };
|
||||
Ok(Self(handle))
|
||||
}
|
||||
|
||||
/// Release a permit on the semaphore.
|
||||
///
|
||||
/// This wraps
|
||||
/// [`ReleaseSemaphore`](https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-releasesemaphore).
|
||||
pub fn release(&self) -> io::Result<()> {
|
||||
result(unsafe { ReleaseSemaphore(*self.0, 1, ptr::null_mut()) })
|
||||
}
|
||||
|
||||
/// Access the underlying handle to the semaphore.
|
||||
pub fn handle(&self) -> &Handle {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
unsafe impl Send for Semaphore {}
|
||||
|
||||
unsafe impl Sync for Semaphore {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue