summaryrefslogtreecommitdiffstats
path: root/third_party/rust/wio/src/thread.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/rust/wio/src/thread.rs
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/wio/src/thread.rs')
-rw-r--r--third_party/rust/wio/src/thread.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/third_party/rust/wio/src/thread.rs b/third_party/rust/wio/src/thread.rs
new file mode 100644
index 0000000000..417247b78b
--- /dev/null
+++ b/third_party/rust/wio/src/thread.rs
@@ -0,0 +1,51 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+use {Result, k32, last_error, w};
+use handle::{Handle};
+use std::os::windows::io::{AsRawHandle, FromRawHandle, IntoRawHandle};
+use std::thread::{JoinHandle};
+
+pub struct Thread(Handle);
+impl Thread {
+ pub fn current() -> Result<Thread> {
+ unsafe { Handle::duplicate_from(k32::GetCurrentThread()).map(Thread) }
+ }
+ /// Returns the old affinity mask on success
+ pub fn set_affinity_mask(&self, mask: usize) -> Result<usize> {
+ let res = unsafe {
+ k32::SetThreadAffinityMask(*self.0, mask as w::ULONG_PTR)
+ };
+ match res {
+ 0 => last_error(),
+ prev => Ok(prev as usize),
+ }
+ }
+}
+impl<T> From<JoinHandle<T>> for Thread {
+ fn from(o: JoinHandle<T>) -> Thread {
+ unsafe { Thread::from_raw_handle(o.into_raw_handle()) }
+ }
+}
+impl<'a, T> From<&'a JoinHandle<T>> for Thread {
+ fn from(o: &'a JoinHandle<T>) -> Thread {
+ unsafe { Thread::from_raw_handle(o.as_raw_handle()) }
+ }
+}
+impl AsRawHandle for Thread {
+ fn as_raw_handle(&self) -> w::HANDLE {
+ self.0.as_raw_handle()
+ }
+}
+impl IntoRawHandle for Thread {
+ fn into_raw_handle(self) -> w::HANDLE {
+ self.0.into_raw_handle()
+ }
+}
+impl FromRawHandle for Thread {
+ unsafe fn from_raw_handle(handle: w::HANDLE) -> Thread {
+ Thread(Handle::from_raw_handle(handle))
+ }
+}