Struct miri::concurrency::thread::Thread

source ·
pub struct Thread<'mir, 'tcx> {
    state: ThreadState,
    thread_name: Option<Vec<u8>>,
    stack: Vec<Frame<'mir, 'tcx, Provenance, FrameExtra<'tcx>>>,
    pub(crate) on_stack_empty: Option<StackEmptyCallback<'mir, 'tcx>>,
    top_user_relevant_frame: Option<usize>,
    join_status: ThreadJoinStatus,
    pub(crate) panic_payload: Option<Scalar<Provenance>>,
    pub(crate) last_error: Option<MPlaceTy<'tcx, Provenance>>,
}
Expand description

A thread.

Fields§

§state: ThreadState§thread_name: Option<Vec<u8>>

Name of the thread.

§stack: Vec<Frame<'mir, 'tcx, Provenance, FrameExtra<'tcx>>>

The virtual call stack.

§on_stack_empty: Option<StackEmptyCallback<'mir, 'tcx>>

The function to call when the stack ran empty, to figure out what to do next. Conceptually, this is the interpreter implementation of the things that happen ‘after’ the Rust language entry point for this thread returns (usually implemented by the C or OS runtime). (None is an error, it means the callback has not been set up yet or is actively running.)

§top_user_relevant_frame: Option<usize>

The index of the topmost user-relevant frame in stack. This field must contain the value produced by get_top_user_relevant_frame. The None state here represents This field is a cache to reduce how often we call that method. The cache is manually maintained inside MiriMachine::after_stack_push and MiriMachine::after_stack_pop.

§join_status: ThreadJoinStatus

The join status.

§panic_payload: Option<Scalar<Provenance>>

The temporary used for storing the argument of the call to miri_start_panic (the panic payload) when unwinding. This is pointer-sized, and matches the Payload type in src/libpanic_unwind/miri.rs.

§last_error: Option<MPlaceTy<'tcx, Provenance>>

Last OS error location in memory. It is a 32-bit integer.

Implementations§

Get the name of the current thread, or <unnamed> if it was not set.

Return the top user-relevant frame, if there is one. Note that the choice to return None here when there is no user-relevant frame is part of justifying the optimization that only pushes of user-relevant frames require updating the top_user_relevant_frame field.

Re-compute the top user-relevant frame from scratch.

Set the top user-relevant frame to the given value. Must be equal to what get_top_user_relevant_frame would return!

Returns the topmost frame that is considered user-relevant, or the top of the stack if there is no such frame, or None if the stack is empty.

Trait Implementations§

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.

Size: 216 bytes