aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/tests/loom_blocking.rs
blob: db7048e3f969bfdbab3c266ef0ee8d0031c29a9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use crate::runtime::{self, Runtime};

use std::sync::Arc;

#[test]
fn blocking_shutdown() {
    loom::model(|| {
        let v = Arc::new(());

        let rt = mk_runtime(1);
        rt.enter(|| {
            for _ in 0..2 {
                let v = v.clone();
                crate::task::spawn_blocking(move || {
                    assert!(1 < Arc::strong_count(&v));
                });
            }
        });

        drop(rt);
        assert_eq!(1, Arc::strong_count(&v));
    });
}

fn mk_runtime(num_threads: usize) -> Runtime {
    runtime::Builder::new()
        .threaded_scheduler()
        .core_threads(num_threads)
        .build()
        .unwrap()
}