lock types
This commit is contained in:
parent
ac8dd1b2f2
commit
0f9c349834
5 changed files with 58 additions and 0 deletions
13
src/test/ui/lint/must_not_suspend/mutex.rs
Normal file
13
src/test/ui/lint/must_not_suspend/mutex.rs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
// edition:2018
|
||||
#![feature(must_not_suspend)]
|
||||
#![deny(must_not_suspend)]
|
||||
|
||||
async fn other() {}
|
||||
|
||||
pub async fn uhoh(m: std::sync::Mutex<()>) {
|
||||
let _guard = m.lock().unwrap(); //~ ERROR `MutexGuard` held across
|
||||
other().await;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
||||
26
src/test/ui/lint/must_not_suspend/mutex.stderr
Normal file
26
src/test/ui/lint/must_not_suspend/mutex.stderr
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
error: `MutexGuard` held across a suspend point, but should not be
|
||||
--> $DIR/mutex.rs:8:9
|
||||
|
|
||||
LL | let _guard = m.lock().unwrap();
|
||||
| ^^^^^^
|
||||
LL | other().await;
|
||||
| ------------- the value is held across this suspend point
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/mutex.rs:3:9
|
||||
|
|
||||
LL | #![deny(must_not_suspend)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
note: Holding a MutexGuard across suspend points can cause deadlocks, delays, and cause Future's to not implement `Send`
|
||||
--> $DIR/mutex.rs:8:9
|
||||
|
|
||||
LL | let _guard = m.lock().unwrap();
|
||||
| ^^^^^^
|
||||
help: consider using a block (`{ ... }`) to shrink the value's scope, ending before the suspend point
|
||||
--> $DIR/mutex.rs:8:9
|
||||
|
|
||||
LL | let _guard = m.lock().unwrap();
|
||||
| ^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue