File: issue-97708-aux.rs

package info (click to toggle)
rustc-web 1.70.0%2Bdfsg1-7~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,517,036 kB
  • sloc: xml: 147,962; javascript: 10,210; sh: 8,590; python: 8,220; ansic: 5,901; cpp: 4,635; makefile: 4,006; asm: 2,856
file content (41 lines) | stat: -rw-r--r-- 923 bytes parent folder | download | duplicates (21)
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
use std::{ptr::NonNull, task::Poll};

struct TaskRef;

struct Header {
    vtable: &'static Vtable,
}

struct Vtable {
    poll: unsafe fn(TaskRef) -> Poll<()>,
    deallocate: unsafe fn(NonNull<Header>),
}

// in the "Header" type, which is a private type in maitake
impl Header {
    pub(crate) const fn new_stub() -> Self {
        unsafe fn nop(_ptr: TaskRef) -> Poll<()> {
            Poll::Pending
        }

        unsafe fn nop_deallocate(ptr: NonNull<Header>) {
            unreachable!("stub task ({ptr:p}) should never be deallocated!");
        }

        Self { vtable: &Vtable { poll: nop, deallocate: nop_deallocate } }
    }
}

// This is a public type in `maitake`
#[repr(transparent)]
#[cfg_attr(loom, allow(dead_code))]
pub struct TaskStub {
    hdr: Header,
}

impl TaskStub {
    /// Create a new unique stub [`Task`].
    pub const fn new() -> Self {
        Self { hdr: Header::new_stub() }
    }
}