about summary refs log tree commit diff
path: root/library/std/src/sys
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-11-26 16:30:42 +0000
committerbors <bors@rust-lang.org>2021-11-26 16:30:42 +0000
commit6d246f0c8d3063fea86abbb65a824362709541ba (patch)
tree89367aa9a510b1c1dec9bd2151cf00c9182222f9 /library/std/src/sys
parent454cc5fb86be180b3ec1138b6f2b480fbf3f1388 (diff)
parenta9710deebcfc0d24ea7b3510c9afa6afb40d2ae1 (diff)
downloadrust-6d246f0c8d3063fea86abbb65a824362709541ba.tar.gz
rust-6d246f0c8d3063fea86abbb65a824362709541ba.zip
Auto merge of #91253 - matthiaskrgr:rollup-dnlcjmr, r=matthiaskrgr
Rollup of 4 pull requests

Successful merges:

 - #91169 (Change cg_ssa's get_param to borrow the builder mutably)
 - #91176 (If the thread does not get the lock in the short term, yield the CPU)
 - #91212 (Fix ICE due to out-of-bounds statement index when reporting borrowck error)
 - #91225 (Fix invalid scrollbar display on source code page)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'library/std/src/sys')
-rw-r--r--library/std/src/sys/hermit/mutex.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/library/std/src/sys/hermit/mutex.rs b/library/std/src/sys/hermit/mutex.rs
index 691e7e07902..415cbba101c 100644
--- a/library/std/src/sys/hermit/mutex.rs
+++ b/library/std/src/sys/hermit/mutex.rs
@@ -46,8 +46,17 @@ impl<T> Spinlock<T> {
     #[inline]
     fn obtain_lock(&self) {
         let ticket = self.queue.fetch_add(1, Ordering::SeqCst) + 1;
+        let mut counter: u16 = 0;
         while self.dequeue.load(Ordering::SeqCst) != ticket {
-            hint::spin_loop();
+            counter += 1;
+            if counter < 100 {
+                hint::spin_loop();
+            } else {
+                counter = 0;
+                unsafe {
+                    abi::yield_now();
+                }
+            }
         }
     }