MUST_NOT_SUSPEND in rustc_lint::builtin - Rust
Description: The `must_not_suspend` lint guards against values that shouldn’t be held across suspend points (`.await`)

Skip to main content

## MUST_NOT_SUSPEND

# Static MUST_NOT_SUSPEND

Source

    pub static MUST_NOT_SUSPEND: &'static Lint

Expand description

The `must_not_suspend` lint guards against values that shouldn’t be held across suspend points (`.await`)

#### §Example

    #![feature(must_not_suspend)]
    #![warn(must_not_suspend)]

    #[must_not_suspend]
    struct SyncThing {}

    async fn yield_now() {}

    pub async fn uhoh() {
        let guard = SyncThing {};
        yield_now().await;
        let _guard = guard;
    }

{{produces}}

#### §Explanation

The `must_not_suspend` lint detects values that are marked with the `#[must_not_suspend]` attribute being held across suspend points. A “suspend” point is usually a `.await` in an async function.

This attribute can be used to mark values that are semantically incorrect across suspends (like certain types of timers), values that have async alternatives, and values that regularly cause problems with the `Send`-ness of async fn’s returned futures (like `MutexGuard`’s)