diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2022-12-13 18:19:03 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-12-13 18:19:03 +0000 |
commit | 0423f76223f41a792b9eeb3a96b9195f236dd4db (patch) | |
tree | 89096d7d2707265ee975a2710b3410b065f32801 /src/thread_parker/windows/keyed_event.rs | |
parent | 147e01489d3ef4d397be0bcce8ef18b769ebd6cf (diff) | |
parent | 1dee7597037a69d57b996d39ffa44040742fac89 (diff) | |
download | parking_lot_core-0423f76223f41a792b9eeb3a96b9195f236dd4db.tar.gz |
Merge "Upgrade parking_lot_core to 0.9.5" am: 51a13c47a0 am: 4d06a26c36 am: 1dee759703
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/parking_lot_core/+/2345687
Change-Id: I3d1b647eb3cc95caa4bbbee063c8b9ea2ddc2cd8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'src/thread_parker/windows/keyed_event.rs')
-rw-r--r-- | src/thread_parker/windows/keyed_event.rs | 66 |
1 files changed, 32 insertions, 34 deletions
diff --git a/src/thread_parker/windows/keyed_event.rs b/src/thread_parker/windows/keyed_event.rs index bbe45a4..302bab5 100644 --- a/src/thread_parker/windows/keyed_event.rs +++ b/src/thread_parker/windows/keyed_event.rs @@ -55,42 +55,40 @@ impl KeyedEvent { #[allow(non_snake_case)] pub fn create() -> Option<KeyedEvent> { - unsafe { - let ntdll = GetModuleHandleA(b"ntdll.dll\0".as_ptr()); - if ntdll == 0 { - return None; - } - - let NtCreateKeyedEvent = - GetProcAddress(ntdll, b"NtCreateKeyedEvent\0".as_ptr())?; - let NtReleaseKeyedEvent = - GetProcAddress(ntdll, b"NtReleaseKeyedEvent\0".as_ptr())?; - let NtWaitForKeyedEvent = - GetProcAddress(ntdll, b"NtWaitForKeyedEvent\0".as_ptr())?; - - let NtCreateKeyedEvent: extern "system" fn( - KeyedEventHandle: *mut HANDLE, - DesiredAccess: u32, - ObjectAttributes: *mut ffi::c_void, - Flags: u32, - ) -> NTSTATUS = mem::transmute(NtCreateKeyedEvent); - let mut handle = MaybeUninit::uninit(); - let status = NtCreateKeyedEvent( - handle.as_mut_ptr(), - GENERIC_READ | GENERIC_WRITE, - ptr::null_mut(), - 0, - ); - if status != STATUS_SUCCESS { - return None; - } + let ntdll = unsafe { GetModuleHandleA(b"ntdll.dll\0".as_ptr()) }; + if ntdll == 0 { + return None; + } - Some(KeyedEvent { - handle: handle.assume_init(), - NtReleaseKeyedEvent: mem::transmute(NtReleaseKeyedEvent), - NtWaitForKeyedEvent: mem::transmute(NtWaitForKeyedEvent), - }) + let NtCreateKeyedEvent = + unsafe { GetProcAddress(ntdll, b"NtCreateKeyedEvent\0".as_ptr())? }; + let NtReleaseKeyedEvent = + unsafe { GetProcAddress(ntdll, b"NtReleaseKeyedEvent\0".as_ptr())? }; + let NtWaitForKeyedEvent = + unsafe { GetProcAddress(ntdll, b"NtWaitForKeyedEvent\0".as_ptr())? }; + + let NtCreateKeyedEvent: extern "system" fn( + KeyedEventHandle: *mut HANDLE, + DesiredAccess: u32, + ObjectAttributes: *mut ffi::c_void, + Flags: u32, + ) -> NTSTATUS = unsafe { mem::transmute(NtCreateKeyedEvent) }; + let mut handle = MaybeUninit::uninit(); + let status = NtCreateKeyedEvent( + handle.as_mut_ptr(), + GENERIC_READ | GENERIC_WRITE, + ptr::null_mut(), + 0, + ); + if status != STATUS_SUCCESS { + return None; } + + Some(KeyedEvent { + handle: unsafe { handle.assume_init() }, + NtReleaseKeyedEvent: unsafe { mem::transmute(NtReleaseKeyedEvent) }, + NtWaitForKeyedEvent: unsafe { mem::transmute(NtWaitForKeyedEvent) }, + }) } #[inline] |