Inline _create() calls and add assertions
This commit is contained in:
parent
a5db2c32e5
commit
10d978c180
21
src/sync.rs
21
src/sync.rs
@ -223,10 +223,13 @@ fn mutex_get_or_create<F>(&mut self, existing: F) -> InterpResult<'tcx, MutexId>
|
|||||||
F: FnOnce(&mut MiriEvalContext<'mir, 'tcx>, MutexId) -> InterpResult<'tcx, Option<MutexId>>,
|
F: FnOnce(&mut MiriEvalContext<'mir, 'tcx>, MutexId) -> InterpResult<'tcx, Option<MutexId>>,
|
||||||
{
|
{
|
||||||
let this = self.eval_context_mut();
|
let this = self.eval_context_mut();
|
||||||
if let Some(old) = existing(this, this.machine.threads.sync.mutexes.next_index())? {
|
let next_index = this.machine.threads.sync.mutexes.next_index();
|
||||||
|
if let Some(old) = existing(this, next_index)? {
|
||||||
Ok(old)
|
Ok(old)
|
||||||
} else {
|
} else {
|
||||||
Ok(self.mutex_create())
|
let new_index = this.machine.threads.sync.mutexes.push(Default::default());
|
||||||
|
assert_eq!(next_index, new_index);
|
||||||
|
Ok(new_index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,10 +326,13 @@ fn rwlock_get_or_create<F>(&mut self, existing: F) -> InterpResult<'tcx, RwLockI
|
|||||||
) -> InterpResult<'tcx, Option<RwLockId>>,
|
) -> InterpResult<'tcx, Option<RwLockId>>,
|
||||||
{
|
{
|
||||||
let this = self.eval_context_mut();
|
let this = self.eval_context_mut();
|
||||||
if let Some(old) = existing(this, this.machine.threads.sync.rwlocks.next_index())? {
|
let next_index = this.machine.threads.sync.rwlocks.next_index();
|
||||||
|
if let Some(old) = existing(this, next_index)? {
|
||||||
Ok(old)
|
Ok(old)
|
||||||
} else {
|
} else {
|
||||||
Ok(self.rwlock_create())
|
let new_index = this.machine.threads.sync.rwlocks.push(Default::default());
|
||||||
|
assert_eq!(next_index, new_index);
|
||||||
|
Ok(new_index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,10 +495,13 @@ fn condvar_get_or_create<F>(&mut self, existing: F) -> InterpResult<'tcx, Condva
|
|||||||
) -> InterpResult<'tcx, Option<CondvarId>>,
|
) -> InterpResult<'tcx, Option<CondvarId>>,
|
||||||
{
|
{
|
||||||
let this = self.eval_context_mut();
|
let this = self.eval_context_mut();
|
||||||
if let Some(old) = existing(this, this.machine.threads.sync.condvars.next_index())? {
|
let next_index = this.machine.threads.sync.condvars.next_index();
|
||||||
|
if let Some(old) = existing(this, next_index)? {
|
||||||
Ok(old)
|
Ok(old)
|
||||||
} else {
|
} else {
|
||||||
Ok(self.condvar_create())
|
let new_index = this.machine.threads.sync.condvars.push(Default::default());
|
||||||
|
assert_eq!(next_index, new_index);
|
||||||
|
Ok(new_index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user