Sha256: 69cf7fa67da9e3efe3eee722791f811efb395dcf821780051e62842654de09e3

Contents?: true

Size: 1.38 KB

Versions: 24

Compression:

Stored size: 1.38 KB

Contents

use crate::runtime::tests::loom_oneshot as oneshot;
use crate::runtime::Builder;
use crate::task::LocalSet;

use std::task::Poll;

/// Waking a runtime will attempt to push a task into a queue of notifications
/// in the runtime, however the tasks in such a queue usually have a reference
/// to the runtime itself. This means that if they are not properly removed at
/// runtime shutdown, this will cause a memory leak.
///
/// This test verifies that waking something during shutdown of a LocalSet does
/// not result in tasks lingering in the queue once shutdown is complete. This
/// is verified using loom's leak finder.
#[test]
fn wake_during_shutdown() {
    loom::model(|| {
        let rt = Builder::new_current_thread().build().unwrap();
        let ls = LocalSet::new();

        let (send, recv) = oneshot::channel();

        ls.spawn_local(async move {
            let mut send = Some(send);

            let () = futures::future::poll_fn(|cx| {
                if let Some(send) = send.take() {
                    send.send(cx.waker().clone());
                }

                Poll::Pending
            })
            .await;
        });

        let handle = loom::thread::spawn(move || {
            let waker = recv.recv();
            waker.wake();
        });

        ls.block_on(&rt, crate::task::yield_now());

        drop(ls);
        handle.join().unwrap();
        drop(rt);
    });
}

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
wasmtime-17.0.1 ./ext/cargo-vendor/tokio-1.35.1/src/runtime/tests/loom_local.rs
wasmtime-17.0.0 ./ext/cargo-vendor/tokio-1.35.1/src/runtime/tests/loom_local.rs
wasmtime-16.0.0 ./ext/cargo-vendor/tokio-1.35.1/src/runtime/tests/loom_local.rs
wasmtime-15.0.1 ./ext/cargo-vendor/tokio-1.35.1/src/runtime/tests/loom_local.rs
wasmtime-15.0.0 ./ext/cargo-vendor/tokio-1.35.1/src/runtime/tests/loom_local.rs
wasmtime-14.0.4 ./ext/cargo-vendor/tokio-1.33.0/src/runtime/tests/loom_local.rs
wasmtime-14.0.3 ./ext/cargo-vendor/tokio-1.33.0/src/runtime/tests/loom_local.rs
wasmtime-14.0.1 ./ext/cargo-vendor/tokio-1.33.0/src/runtime/tests/loom_local.rs
wasmtime-14.0.0 ./ext/cargo-vendor/tokio-1.33.0/src/runtime/tests/loom_local.rs
wasmtime-13.0.0 ./ext/cargo-vendor/tokio-1.32.0/src/runtime/tests/loom_local.rs
wasmtime-12.0.1 ./ext/cargo-vendor/tokio-1.32.0/src/runtime/tests/loom_local.rs
wasmtime-12.0.0 ./ext/cargo-vendor/tokio-1.32.0/src/runtime/tests/loom_local.rs
wasmtime-11.0.0 ./ext/cargo-vendor/tokio-1.32.0/src/runtime/tests/loom_local.rs
wasmtime-10.0.1 ./ext/cargo-vendor/tokio-1.30.0/src/runtime/tests/loom_local.rs
wasmtime-10.0.0 ./ext/cargo-vendor/tokio-1.30.0/src/runtime/tests/loom_local.rs
wasmtime-9.0.4 ./ext/cargo-vendor/tokio-1.30.0/src/runtime/tests/loom_local.rs
wasmtime-9.0.1 ./ext/cargo-vendor/tokio-1.28.1/src/runtime/tests/loom_local.rs
wasmtime-8.0.0 ./ext/cargo-vendor/tokio-1.27.0/src/runtime/tests/loom_local.rs
wasmtime-7.0.0 ./ext/cargo-vendor/tokio-1.27.0/src/runtime/tests/loom_local.rs
wasmtime-6.0.1 ./ext/cargo-vendor/tokio-1.25.0/src/runtime/tests/loom_local.rs