pub struct Proxy {
client: Client,
helper: OnceLock<HelperThread>,
data: Mutex<ProxyData>,
wake_pending: Condvar,
}Expand description
A wrapper around jobserver client used for two purposes:
- Ensuring that the single token that must be permanently held by the rustc process cannot be accidentally released.
- “Token buffering”, immediately acquiring freshly released tokens if necessary, without going through the real jobserver.
Fields§
§client: ClientThe wrapped jobserver client.
helper: OnceLock<HelperThread>Helper thread associated with the wrapped client.
data: Mutex<ProxyData>The proxy’s own data.
wake_pending: CondvarThreads which are currently waiting for a token will wait on this condvar.
Implementations§
Source§impl Proxy
impl Proxy
pub fn new() -> Arc<Self> ⓘ
Sourcepub fn acquire_thread(&self)
pub fn acquire_thread(&self)
Acquires a token, possibly using some buffered tokens as an optimization. May block and wait until the token is available.
Sourcepub fn release_thread(&self)
pub fn release_thread(&self)
Releases a token, possibly immediately giving it to some other thread as an optimization. Makes sure that the last token is never actually released to the wrapped jobserver.
Auto Trait Implementations§
impl !Freeze for Proxy
impl !RefUnwindSafe for Proxy
impl !UnwindSafe for Proxy
impl DynSend for Proxy
impl DynSync for Proxy
impl Send for Proxy
impl Sync for Proxy
impl Unpin for Proxy
impl UnsafeUnpin for Proxy
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
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: 72 bytes