pub struct JobState<'a, 'cfg> {
messages: Arc<Queue<Message>>,
output: Option<&'a DiagDedupe<'cfg>>,
id: JobId,
rmeta_required: Cell<bool>,
_marker: PhantomData<&'a ()>,
}
Expand description
A JobState
is constructed by JobQueue::run
and passed to Job::run
. It includes everything
necessary to communicate between the main thread and the execution of the job.
The job may execute on either a dedicated thread or the main thread. If the job executes on the
main thread, the output
field must be set to prevent a deadlock.
Fields§
§messages: Arc<Queue<Message>>
Channel back to the main thread to coordinate messages and such.
When the output
field is Some
, care must be taken to avoid calling push_bounded
on
the message queue to prevent a deadlock.
output: Option<&'a DiagDedupe<'cfg>>
Normally output is sent to the job queue with backpressure. When the job is fresh
however we need to immediately display the output to prevent a deadlock as the
output messages are processed on the same thread as they are sent from. output
defines where to output in this case.
Currently the Shell
inside Config
is wrapped in a RefCell
and thus can’t be passed
between threads. This means that it isn’t possible for multiple output messages to be
interleaved. In the future, it may be wrapped in a Mutex
instead. In this case
interleaving is still prevented as the lock would be held for the whole printing of an
output message.
id: JobId
The job id that this state is associated with, used when sending messages back to the main thread.
rmeta_required: Cell<bool>
Whether or not we’re expected to have a call to rmeta_produced
. Once
that method is called this is dynamically set to false
to prevent
sending a double message later on.
_marker: PhantomData<&'a ()>
Implementations§
source§impl<'a, 'cfg> JobState<'a, 'cfg>
impl<'a, 'cfg> JobState<'a, 'cfg>
pub(super) fn new( id: JobId, messages: Arc<Queue<Message>>, output: Option<&'a DiagDedupe<'cfg>>, rmeta_required: bool ) -> Self
pub fn running(&self, cmd: &ProcessBuilder)
pub fn build_plan( &self, module_name: String, cmd: ProcessBuilder, filenames: Arc<Vec<OutputFile>> )
pub fn stdout(&self, stdout: String) -> CargoResult<()>
pub fn stderr(&self, stderr: String) -> CargoResult<()>
sourcepub fn emit_diag(
&self,
level: String,
diag: String,
fixable: bool
) -> CargoResult<()>
pub fn emit_diag( &self, level: String, diag: String, fixable: bool ) -> CargoResult<()>
See Message::Diagnostic
and Message::WarningCount
.
sourcepub fn warning(&self, warning: String) -> CargoResult<()>
pub fn warning(&self, warning: String) -> CargoResult<()>
See Message::Warning
.
sourcepub fn rmeta_produced(&self)
pub fn rmeta_produced(&self)
A method used to signal to the coordinator thread that the rmeta file for an rlib has been produced. This is only called for some rmeta builds when required, and can be called at any time before a job ends. This should only be called once because a metadata file can only be produced once!
sourcepub(super) fn run_to_finish(self, job: Job)
pub(super) fn run_to_finish(self, job: Job)
Drives a Job
to finish. This ensures that a Message::Finish
is
sent even if our job panics.
pub fn future_incompat_report(&self, report: Vec<FutureBreakageItem>)
Auto Trait Implementations§
impl<'a, 'cfg> !RefUnwindSafe for JobState<'a, 'cfg>
impl<'a, 'cfg> !Send for JobState<'a, 'cfg>
impl<'a, 'cfg> !Sync for JobState<'a, 'cfg>
impl<'a, 'cfg> Unpin for JobState<'a, 'cfg>
impl<'a, 'cfg> !UnwindSafe for JobState<'a, 'cfg>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
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: 24 bytes