Coverage Report

Created: 2021-01-22 16:54

crossbeam-channel/src/utils.rs
Line
Count
Source (jump to first uncovered line)
1
//! Miscellaneous utilities.
2
3
use std::cell::{Cell, UnsafeCell};
4
use std::num::Wrapping;
5
use std::ops::{Deref, DerefMut};
6
use std::sync::atomic::{AtomicBool, Ordering};
7
use std::thread;
8
use std::time::{Duration, Instant};
9
10
use crossbeam_utils::Backoff;
11
12
/// Randomly shuffles a slice.
13
10.0M
pub(crate) fn shuffle<T>(v: &mut [T]) {
14
10.0M
    let len = v.len();
15
10.0M
    if len <= 1 {
16
8.43M
        return;
17
1.65M
    }
18
1.65M
19
1.65M
    thread_local! {
20
1.65M
        static RNG: Cell<Wrapping<u32>> = Cell::new(Wrapping(1_406_868_647));
21
1.65M
    }
22
1.65M
23
1.68M
    let _ = RNG.try_with(|rng| {
24
3.29M
        for i in 1..
len1.68M
{
25
3.29M
            // This is the 32-bit variant of Xorshift.
26
3.29M
            //
27
3.29M
            // Source: https://en.wikipedia.org/wiki/Xorshift
28
3.29M
            let mut x = rng.get();
29
3.29M
            x ^= x << 13;
30
3.29M
            x ^= x >> 17;
31
3.29M
            x ^= x << 5;
32
3.29M
            rng.set(x);
33
3.29M
34
3.29M
            let x = x.0;
35
3.29M
            let n = i + 1;
36
3.29M
37
3.29M
            // This is a fast alternative to `let j = x % n`.
38
3.29M
            //
39
3.29M
            // Author: Daniel Lemire
40
3.29M
            // Source: https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/
41
3.29M
            let j = ((x as u64).wrapping_mul(n as u64) >> 32) as u32 as usize;
42
3.29M
43
3.29M
            v.swap(i, j);
44
3.29M
        }
45
1.68M
    }
)1.65M
;
46
10.0M
}
47
48
/// Sleeps until the deadline, or forever if the deadline isn't specified.
49
10
pub(crate) fn sleep_until(deadline: Option<Instant>) {
50
10
    loop {
51
10
        match deadline {
52
10
            None => 
thread::sleep(Duration::from_secs(1000))0
,
53
10
            Some(d) => {
54
10
                let now = Instant::now();
55
10
                if now >= d {
56
0
                    break;
57
10
                }
58
10
                thread::sleep(d - now);
59
            }
60
        }
61
    }
62
0
}
63
64
/// A simple spinlock.
65
pub(crate) struct Spinlock<T> {
66
    flag: AtomicBool,
67
    value: UnsafeCell<T>,
68
}
69
70
impl<T> Spinlock<T> {
71
    /// Returns a new spinlock initialized with `value`.
72
83.2k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
83.2k
        Spinlock {
74
83.2k
            flag: AtomicBool::new(false),
75
83.2k
            value: UnsafeCell::new(value),
76
83.2k
        }
77
83.2k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::new
Line
Count
Source
72
1.11k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
1.11k
        Spinlock {
74
1.11k
            flag: AtomicBool::new(false),
75
1.11k
            value: UnsafeCell::new(value),
76
1.11k
        }
77
1.11k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
20.0k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
20.0k
        Spinlock {
74
20.0k
            flag: AtomicBool::new(false),
75
20.0k
            value: UnsafeCell::new(value),
76
20.0k
        }
77
20.0k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::new
Line
Count
Source
72
1.08k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
1.08k
        Spinlock {
74
1.08k
            flag: AtomicBool::new(false),
75
1.08k
            value: UnsafeCell::new(value),
76
1.08k
        }
77
1.08k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
4.06k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
4.06k
        Spinlock {
74
4.06k
            flag: AtomicBool::new(false),
75
4.06k
            value: UnsafeCell::new(value),
76
4.06k
        }
77
4.06k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
537
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
537
        Spinlock {
74
537
            flag: AtomicBool::new(false),
75
537
            value: UnsafeCell::new(value),
76
537
        }
77
537
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::new
Line
Count
Source
72
42
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
42
        Spinlock {
74
42
            flag: AtomicBool::new(false),
75
42
            value: UnsafeCell::new(value),
76
42
        }
77
42
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
22.2k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
22.2k
        Spinlock {
74
22.2k
            flag: AtomicBool::new(false),
75
22.2k
            value: UnsafeCell::new(value),
76
22.2k
        }
77
22.2k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
6
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
6
        Spinlock {
74
6
            flag: AtomicBool::new(false),
75
6
            value: UnsafeCell::new(value),
76
6
        }
77
6
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
1
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
1
        Spinlock {
74
1
            flag: AtomicBool::new(false),
75
1
            value: UnsafeCell::new(value),
76
1
        }
77
1
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
7
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
7
        Spinlock {
74
7
            flag: AtomicBool::new(false),
75
7
            value: UnsafeCell::new(value),
76
7
        }
77
7
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::new
Line
Count
Source
72
3
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
3
        Spinlock {
74
3
            flag: AtomicBool::new(false),
75
3
            value: UnsafeCell::new(value),
76
3
        }
77
3
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
2
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
2
        Spinlock {
74
2
            flag: AtomicBool::new(false),
75
2
            value: UnsafeCell::new(value),
76
2
        }
77
2
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
11.1k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
11.1k
        Spinlock {
74
11.1k
            flag: AtomicBool::new(false),
75
11.1k
            value: UnsafeCell::new(value),
76
11.1k
        }
77
11.1k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::new
Line
Count
Source
72
1.44k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
1.44k
        Spinlock {
74
1.44k
            flag: AtomicBool::new(false),
75
1.44k
            value: UnsafeCell::new(value),
76
1.44k
        }
77
1.44k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
10.3k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
10.3k
        Spinlock {
74
10.3k
            flag: AtomicBool::new(false),
75
10.3k
            value: UnsafeCell::new(value),
76
10.3k
        }
77
10.3k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
4.07k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
4.07k
        Spinlock {
74
4.07k
            flag: AtomicBool::new(false),
75
4.07k
            value: UnsafeCell::new(value),
76
4.07k
        }
77
4.07k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::new
Line
Count
Source
72
1.09k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
1.09k
        Spinlock {
74
1.09k
            flag: AtomicBool::new(false),
75
1.09k
            value: UnsafeCell::new(value),
76
1.09k
        }
77
1.09k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::new
Line
Count
Source
72
13
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
13
        Spinlock {
74
13
            flag: AtomicBool::new(false),
75
13
            value: UnsafeCell::new(value),
76
13
        }
77
13
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::new
Line
Count
Source
72
6.04k
    pub(crate) fn new(value: T) -> Spinlock<T> {
73
6.04k
        Spinlock {
74
6.04k
            flag: AtomicBool::new(false),
75
6.04k
            value: UnsafeCell::new(value),
76
6.04k
        }
77
6.04k
    }
78
79
    /// Locks the spinlock.
80
96.9M
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
96.9M
        let backoff = Backoff::new();
82
108M
        while self.flag.swap(true, Ordering::Acquire) {
83
11.2M
            backoff.snooze();
84
11.2M
        }
85
96.9M
        SpinlockGuard { parent: self }
86
96.9M
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Line
Count
Source
80
929k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
929k
        let backoff = Backoff::new();
82
2.21M
        while self.flag.swap(true, Ordering::Acquire) {
83
1.28M
            backoff.snooze();
84
1.28M
        }
85
929k
        SpinlockGuard { parent: self }
86
929k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
20.9k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
20.9k
        let backoff = Backoff::new();
82
21.1k
        while self.flag.swap(true, Ordering::Acquire) {
83
104
            backoff.snooze();
84
104
        }
85
20.9k
        SpinlockGuard { parent: self }
86
20.9k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Line
Count
Source
80
23.0M
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
23.0M
        let backoff = Backoff::new();
82
29.3M
        while self.flag.swap(true, Ordering::Acquire) {
83
6.25M
            backoff.snooze();
84
6.25M
        }
85
23.0M
        SpinlockGuard { parent: self }
86
23.0M
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
9.03k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
9.03k
        let backoff = Backoff::new();
82
10.5k
        while self.flag.swap(true, Ordering::Acquire) {
83
1.48k
            backoff.snooze();
84
1.48k
        }
85
9.03k
        SpinlockGuard { parent: self }
86
9.03k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
27.2k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
27.2k
        let backoff = Backoff::new();
82
30.0k
        while self.flag.swap(true, Ordering::Acquire) {
83
2.80k
            backoff.snooze();
84
2.80k
        }
85
27.2k
        SpinlockGuard { parent: self }
86
27.2k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Line
Count
Source
80
68.6k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
68.6k
        let backoff = Backoff::new();
82
171k
        while self.flag.swap(true, Ordering::Acquire) {
83
103k
            backoff.snooze();
84
103k
        }
85
68.6k
        SpinlockGuard { parent: self }
86
68.6k
    }
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
23.8k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
23.8k
        let backoff = Backoff::new();
82
24.0k
        while self.flag.swap(true, Ordering::Acquire) {
83
228
            backoff.snooze();
84
228
        }
85
23.8k
        SpinlockGuard { parent: self }
86
23.8k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
12
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
12
        let backoff = Backoff::new();
82
12
        while self.flag.swap(true, Ordering::Acquire) {
83
0
            backoff.snooze();
84
0
        }
85
12
        SpinlockGuard { parent: self }
86
12
    }
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
1
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
1
        let backoff = Backoff::new();
82
1
        while self.flag.swap(true, Ordering::Acquire) {
83
0
            backoff.snooze();
84
0
        }
85
1
        SpinlockGuard { parent: self }
86
1
    }
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
7
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
7
        let backoff = Backoff::new();
82
7
        while self.flag.swap(true, Ordering::Acquire) {
83
0
            backoff.snooze();
84
0
        }
85
7
        SpinlockGuard { parent: self }
86
7
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Line
Count
Source
80
6
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
6
        let backoff = Backoff::new();
82
6
        while self.flag.swap(true, Ordering::Acquire) {
83
0
            backoff.snooze();
84
0
        }
85
6
        SpinlockGuard { parent: self }
86
6
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
2
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
2
        let backoff = Backoff::new();
82
2
        while self.flag.swap(true, Ordering::Acquire) {
83
0
            backoff.snooze();
84
0
        }
85
2
        SpinlockGuard { parent: self }
86
2
    }
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
15.1k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
15.1k
        let backoff = Backoff::new();
82
15.6k
        while self.flag.swap(true, Ordering::Acquire) {
83
531
            backoff.snooze();
84
531
        }
85
15.1k
        SpinlockGuard { parent: self }
86
15.1k
    }
Unexecuted instantiation: <crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Line
Count
Source
80
355k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
355k
        let backoff = Backoff::new();
82
450k
        while self.flag.swap(true, Ordering::Acquire) {
83
95.1k
            backoff.snooze();
84
95.1k
        }
85
355k
        SpinlockGuard { parent: self }
86
355k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
125k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
125k
        let backoff = Backoff::new();
82
169k
        while self.flag.swap(true, Ordering::Acquire) {
83
44.1k
            backoff.snooze();
84
44.1k
        }
85
125k
        SpinlockGuard { parent: self }
86
125k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
29.1k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
29.1k
        let backoff = Backoff::new();
82
30.8k
        while self.flag.swap(true, Ordering::Acquire) {
83
1.62k
            backoff.snooze();
84
1.62k
        }
85
29.1k
        SpinlockGuard { parent: self }
86
29.1k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Line
Count
Source
80
71.9M
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
71.9M
        let backoff = Backoff::new();
82
75.3M
        while self.flag.swap(true, Ordering::Acquire) {
83
3.40M
            backoff.snooze();
84
3.40M
        }
85
71.9M
        SpinlockGuard { parent: self }
86
71.9M
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::waker::Waker>>::lock
Line
Count
Source
80
6.08k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
6.08k
        let backoff = Backoff::new();
82
6.08k
        while self.flag.swap(true, Ordering::Acquire) {
83
1
            backoff.snooze();
84
1
        }
85
6.08k
        SpinlockGuard { parent: self }
86
6.08k
    }
<crossbeam_channel::utils::Spinlock<crossbeam_channel::flavors::zero::Inner>>::lock
Line
Count
Source
80
314k
    pub(crate) fn lock(&self) -> SpinlockGuard<'_, T> {
81
314k
        let backoff = Backoff::new();
82
392k
        while self.flag.swap(true, Ordering::Acquire) {
83
78.3k
            backoff.snooze();
84
78.3k
        }
85
314k
        SpinlockGuard { parent: self }
86
314k
    }
87
}
88
89
/// A guard holding a spinlock locked.
90
pub(crate) struct SpinlockGuard<'a, T> {
91
    parent: &'a Spinlock<T>,
92
}
93
94
impl<T> Drop for SpinlockGuard<'_, T> {
95
102M
    fn drop(&mut self) {
96
102M
        self.parent.flag.store(false, Ordering::Release);
97
102M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
20.9k
    fn drop(&mut self) {
96
20.9k
        self.parent.flag.store(false, Ordering::Release);
97
20.9k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::drop::Drop>::drop
Line
Count
Source
95
937k
    fn drop(&mut self) {
96
937k
        self.parent.flag.store(false, Ordering::Release);
97
937k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
9.11k
    fn drop(&mut self) {
96
9.11k
        self.parent.flag.store(false, Ordering::Release);
97
9.11k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::drop::Drop>::drop
Line
Count
Source
95
24.1M
    fn drop(&mut self) {
96
24.1M
        self.parent.flag.store(false, Ordering::Release);
97
24.1M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
27.2k
    fn drop(&mut self) {
96
27.2k
        self.parent.flag.store(false, Ordering::Release);
97
27.2k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::drop::Drop>::drop
Line
Count
Source
95
68.8k
    fn drop(&mut self) {
96
68.8k
        self.parent.flag.store(false, Ordering::Release);
97
68.8k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
23.8k
    fn drop(&mut self) {
96
23.8k
        self.parent.flag.store(false, Ordering::Release);
97
23.8k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
12
    fn drop(&mut self) {
96
12
        self.parent.flag.store(false, Ordering::Release);
97
12
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
1
    fn drop(&mut self) {
96
1
        self.parent.flag.store(false, Ordering::Release);
97
1
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
7
    fn drop(&mut self) {
96
7
        self.parent.flag.store(false, Ordering::Release);
97
7
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::drop::Drop>::drop
Line
Count
Source
95
6
    fn drop(&mut self) {
96
6
        self.parent.flag.store(false, Ordering::Release);
97
6
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
2
    fn drop(&mut self) {
96
2
        self.parent.flag.store(false, Ordering::Release);
97
2
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
15.1k
    fn drop(&mut self) {
96
15.1k
        self.parent.flag.store(false, Ordering::Release);
97
15.1k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
126k
    fn drop(&mut self) {
96
126k
        self.parent.flag.store(false, Ordering::Release);
97
126k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::drop::Drop>::drop
Line
Count
Source
95
358k
    fn drop(&mut self) {
96
358k
        self.parent.flag.store(false, Ordering::Release);
97
358k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
29.3k
    fn drop(&mut self) {
96
29.3k
        self.parent.flag.store(false, Ordering::Release);
97
29.3k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::drop::Drop>::drop
Line
Count
Source
95
76.7M
    fn drop(&mut self) {
96
76.7M
        self.parent.flag.store(false, Ordering::Release);
97
76.7M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::drop::Drop>::drop
Line
Count
Source
95
6.08k
    fn drop(&mut self) {
96
6.08k
        self.parent.flag.store(false, Ordering::Release);
97
6.08k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::drop::Drop>::drop
Line
Count
Source
95
323k
    fn drop(&mut self) {
96
323k
        self.parent.flag.store(false, Ordering::Release);
97
323k
    }
98
}
99
100
impl<T> Deref for SpinlockGuard<'_, T> {
101
    type Target = T;
102
103
102M
    fn deref(&self) -> &T {
104
102M
        unsafe { &*self.parent.value.get() }
105
102M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::Deref>::deref
Line
Count
Source
103
566k
    fn deref(&self) -> &T {
104
566k
        unsafe { &*self.parent.value.get() }
105
566k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
41.4k
    fn deref(&self) -> &T {
104
41.4k
        unsafe { &*self.parent.value.get() }
105
41.4k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
15.5k
    fn deref(&self) -> &T {
104
15.5k
        unsafe { &*self.parent.value.get() }
105
15.5k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::Deref>::deref
Line
Count
Source
103
23.5M
    fn deref(&self) -> &T {
104
23.5M
        unsafe { &*self.parent.value.get() }
105
23.5M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
41.6k
    fn deref(&self) -> &T {
104
41.6k
        unsafe { &*self.parent.value.get() }
105
41.6k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::Deref>::deref
Line
Count
Source
103
34.8k
    fn deref(&self) -> &T {
104
34.8k
        unsafe { &*self.parent.value.get() }
105
34.8k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
46.7k
    fn deref(&self) -> &T {
104
46.7k
        unsafe { &*self.parent.value.get() }
105
46.7k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
21
    fn deref(&self) -> &T {
104
21
        unsafe { &*self.parent.value.get() }
105
21
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
2
    fn deref(&self) -> &T {
104
2
        unsafe { &*self.parent.value.get() }
105
2
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
14
    fn deref(&self) -> &T {
104
14
        unsafe { &*self.parent.value.get() }
105
14
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::Deref>::deref
Line
Count
Source
103
6
    fn deref(&self) -> &T {
104
6
        unsafe { &*self.parent.value.get() }
105
6
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
4
    fn deref(&self) -> &T {
104
4
        unsafe { &*self.parent.value.get() }
105
4
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
28.0k
    fn deref(&self) -> &T {
104
28.0k
        unsafe { &*self.parent.value.get() }
105
28.0k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
163k
    fn deref(&self) -> &T {
104
163k
        unsafe { &*self.parent.value.get() }
105
163k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::Deref>::deref
Line
Count
Source
103
280k
    fn deref(&self) -> &T {
104
280k
        unsafe { &*self.parent.value.get() }
105
280k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
46.2k
    fn deref(&self) -> &T {
104
46.2k
        unsafe { &*self.parent.value.get() }
105
46.2k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::Deref>::deref
Line
Count
Source
103
77.8M
    fn deref(&self) -> &T {
104
77.8M
        unsafe { &*self.parent.value.get() }
105
77.8M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::Deref>::deref
Line
Count
Source
103
12.1k
    fn deref(&self) -> &T {
104
12.1k
        unsafe { &*self.parent.value.get() }
105
12.1k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::Deref>::deref
Line
Count
Source
103
319k
    fn deref(&self) -> &T {
104
319k
        unsafe { &*self.parent.value.get() }
105
319k
    }
106
}
107
108
impl<T> DerefMut for SpinlockGuard<'_, T> {
109
117M
    fn deref_mut(&mut self) -> &mut T {
110
117M
        unsafe { &mut *self.parent.value.get() }
111
117M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
21.1k
    fn deref_mut(&mut self) -> &mut T {
110
21.1k
        unsafe { &mut *self.parent.value.get() }
111
21.1k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
1.69M
    fn deref_mut(&mut self) -> &mut T {
110
1.69M
        unsafe { &mut *self.parent.value.get() }
111
1.69M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
31.1M
    fn deref_mut(&mut self) -> &mut T {
110
31.1M
        unsafe { &mut *self.parent.value.get() }
111
31.1M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
9.77k
    fn deref_mut(&mut self) -> &mut T {
110
9.77k
        unsafe { &mut *self.parent.value.get() }
111
9.77k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
134k
    fn deref_mut(&mut self) -> &mut T {
110
134k
        unsafe { &mut *self.parent.value.get() }
111
134k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
29.6k
    fn deref_mut(&mut self) -> &mut T {
110
29.6k
        unsafe { &mut *self.parent.value.get() }
111
29.6k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
24.1k
    fn deref_mut(&mut self) -> &mut T {
110
24.1k
        unsafe { &mut *self.parent.value.get() }
111
24.1k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
14
    fn deref_mut(&mut self) -> &mut T {
110
14
        unsafe { &mut *self.parent.value.get() }
111
14
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
1
    fn deref_mut(&mut self) -> &mut T {
110
1
        unsafe { &mut *self.parent.value.get() }
111
1
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
9
    fn deref_mut(&mut self) -> &mut T {
110
9
        unsafe { &mut *self.parent.value.get() }
111
9
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
7
    fn deref_mut(&mut self) -> &mut T {
110
7
        unsafe { &mut *self.parent.value.get() }
111
7
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
2
    fn deref_mut(&mut self) -> &mut T {
110
2
        unsafe { &mut *self.parent.value.get() }
111
2
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
15.6k
    fn deref_mut(&mut self) -> &mut T {
110
15.6k
        unsafe { &mut *self.parent.value.get() }
111
15.6k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
518k
    fn deref_mut(&mut self) -> &mut T {
110
518k
        unsafe { &mut *self.parent.value.get() }
111
518k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
167k
    fn deref_mut(&mut self) -> &mut T {
110
167k
        unsafe { &mut *self.parent.value.get() }
111
167k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
83.5M
    fn deref_mut(&mut self) -> &mut T {
110
83.5M
        unsafe { &mut *self.parent.value.get() }
111
83.5M
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
30.4k
    fn deref_mut(&mut self) -> &mut T {
110
30.4k
        unsafe { &mut *self.parent.value.get() }
111
30.4k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::flavors::zero::Inner> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
346k
    fn deref_mut(&mut self) -> &mut T {
110
346k
        unsafe { &mut *self.parent.value.get() }
111
346k
    }
<crossbeam_channel::utils::SpinlockGuard<crossbeam_channel::waker::Waker> as core::ops::deref::DerefMut>::deref_mut
Line
Count
Source
109
6.09k
    fn deref_mut(&mut self) -> &mut T {
110
6.09k
        unsafe { &mut *self.parent.value.get() }
111
6.09k
    }
112
}