diff --git a/src/shims/posix/linux/sync.rs b/src/shims/posix/linux/sync.rs index f9cfb3b8a2b0..23d3330c74e9 100644 --- a/src/shims/posix/linux/sync.rs +++ b/src/shims/posix/linux/sync.rs @@ -16,7 +16,7 @@ pub fn futex<'tcx>( this.memory.check_ptr_access(addr, Size::from_bytes(4), Align::from_bytes(4).unwrap())?; - let addr = addr.assert_ptr(); + let addr = addr.assert_ptr().erase_tag(); let thread = this.get_active_thread(); diff --git a/src/sync.rs b/src/sync.rs index d5594fb9eca4..986857221b62 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -115,7 +115,7 @@ pub(super) struct SynchronizationState { mutexes: IndexVec, rwlocks: IndexVec, condvars: IndexVec, - futexes: HashMap, Futex>, + futexes: HashMap, } // Private extension trait for local helper methods @@ -418,14 +418,14 @@ fn condvar_remove_waiter(&mut self, id: CondvarId, thread: ThreadId) { this.machine.threads.sync.condvars[id].waiters.retain(|waiter| waiter.thread != thread); } - fn futex_wait(&mut self, addr: Pointer, thread: ThreadId) { + fn futex_wait(&mut self, addr: Pointer, thread: ThreadId) { let this = self.eval_context_mut(); let waiters = &mut this.machine.threads.sync.futexes.entry(addr).or_default().waiters; assert!(waiters.iter().all(|waiter| waiter.thread != thread), "thread is already waiting"); waiters.push_back(FutexWaiter { thread }); } - fn futex_wake(&mut self, addr: Pointer) -> Option { + fn futex_wake(&mut self, addr: Pointer) -> Option { let this = self.eval_context_mut(); let waiters = &mut this.machine.threads.sync.futexes.get_mut(&addr)?.waiters; waiters.pop_front().map(|waiter| waiter.thread)