summaryrefslogtreecommitdiffstats
path: root/vendor/parking_lot_core-0.8.6/src/thread_parker/wasm.rs
blob: ba4118c01efb0e0fcc623f99cb0d8bc9305c2be1 (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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// Copyright 2016 Amanieu d'Antras
//
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
// http://opensource.org/licenses/MIT>, at your option. This file may not be
// copied, modified, or distributed except according to those terms.

//! The wasm platform can't park when atomic support is not available.
//! So this ThreadParker just panics on any attempt to park.

use instant::Instant;
use std::thread;

pub struct ThreadParker(());

impl super::ThreadParkerT for ThreadParker {
    type UnparkHandle = UnparkHandle;

    const IS_CHEAP_TO_CONSTRUCT: bool = true;

    fn new() -> ThreadParker {
        ThreadParker(())
    }

    unsafe fn prepare_park(&self) {
        panic!("Parking not supported on this platform");
    }

    unsafe fn timed_out(&self) -> bool {
        panic!("Parking not supported on this platform");
    }

    unsafe fn park(&self) {
        panic!("Parking not supported on this platform");
    }

    unsafe fn park_until(&self, _timeout: Instant) -> bool {
        panic!("Parking not supported on this platform");
    }

    unsafe fn unpark_lock(&self) -> UnparkHandle {
        panic!("Parking not supported on this platform");
    }
}

pub struct UnparkHandle(());

impl super::UnparkHandleT for UnparkHandle {
    unsafe fn unpark(self) {}
}

pub fn thread_yield() {
    thread::yield_now();
}