about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMara Bos <m-ou.se@m-ou.se>2020-09-20 14:49:04 +0200
committerMara Bos <m-ou.se@m-ou.se>2020-10-01 16:08:58 +0200
commit93310efdbe80d01e287b935e0f86a834bc6c4574 (patch)
treee96a93ffef6ef5d195b369c4df77403c92a217b5
parent8b2bdfd453d196f4d108183efe1f5a58292d5f11 (diff)
downloadrust-93310efdbe80d01e287b935e0f86a834bc6c4574.tar.gz
rust-93310efdbe80d01e287b935e0f86a834bc6c4574.zip
Use AcquireSRWLockExclusive::is_available() instead of an extra lookup.
-rw-r--r--library/std/src/sys/windows/mutex.rs23
1 files changed, 6 insertions, 17 deletions
diff --git a/library/std/src/sys/windows/mutex.rs b/library/std/src/sys/windows/mutex.rs
index 1e09b95c872..1028dc9ff50 100644
--- a/library/std/src/sys/windows/mutex.rs
+++ b/library/std/src/sys/windows/mutex.rs
@@ -23,7 +23,6 @@ use crate::cell::{Cell, UnsafeCell};
 use crate::mem::{self, MaybeUninit};
 use crate::sync::atomic::{AtomicUsize, Ordering};
 use crate::sys::c;
-use crate::sys::compat;
 
 pub struct Mutex {
     // This is either directly an SRWLOCK (if supported), or a Box<Inner> otherwise.
@@ -40,8 +39,8 @@ struct Inner {
 
 #[derive(Clone, Copy)]
 enum Kind {
-    SRWLock = 1,
-    CriticalSection = 2,
+    SRWLock,
+    CriticalSection,
 }
 
 #[inline]
@@ -130,21 +129,11 @@ impl Mutex {
 }
 
 fn kind() -> Kind {
-    static KIND: AtomicUsize = AtomicUsize::new(0);
-
-    let val = KIND.load(Ordering::SeqCst);
-    if val == Kind::SRWLock as usize {
-        return Kind::SRWLock;
-    } else if val == Kind::CriticalSection as usize {
-        return Kind::CriticalSection;
+    if c::AcquireSRWLockExclusive::is_available() {
+        Kind::SRWLock
+    } else {
+        Kind::CriticalSection
     }
-
-    let ret = match compat::lookup("kernel32", "AcquireSRWLockExclusive") {
-        None => Kind::CriticalSection,
-        Some(..) => Kind::SRWLock,
-    };
-    KIND.store(ret as usize, Ordering::SeqCst);
-    ret
 }
 
 pub struct ReentrantMutex {