Waiter

Struct Waiter 

Source
pub struct Waiter { /* private fields */ }
Expand description

A type that can put a thread to sleep waiting for a condition.

Implementations§

Source§

impl Waiter

Source

pub fn new() -> Self

Create a new waiter.

Source

pub fn new_ignoring_signals() -> Self

Create a new waiter that doesn’t wake up when a signal is received.

Source

pub fn freeze<L>(&self, locked: &mut Locked<L>, current_task: &CurrentTask)

Freeze the task until the waiter is woken up.

No signal, e.g. EINTR (interrupt), should be received.

Source

pub fn wait<L>( &self, locked: &mut Locked<L>, current_task: &CurrentTask, ) -> Result<(), Errno>

Wait until the waiter is woken up.

If the wait is interrupted (see Waiter::interrupt), this function returns EINTR.

Source

pub fn wait_until<L>( &self, locked: &mut Locked<L>, current_task: &CurrentTask, deadline: MonotonicInstant, ) -> Result<(), Errno>

Wait until the given deadline has passed or the waiter is woken up.

If the wait deadline is nonzero and is interrupted (see Waiter::interrupt), this function returns EINTR. Callers must take special care not to lose any accumulated data or local state when EINTR is received as this is a normal and recoverable situation.

Using a 0 deadline (no waiting, useful for draining pending events) will not wait and is guaranteed not to issue EINTR.

It the timeout elapses with no events, this function returns ETIMEDOUT.

Processes at most one event. If the caller is interested in draining the events, it should repeatedly call this function with a 0 deadline until it reports ETIMEDOUT. (This case is why a 0 deadline must not return EINTR, as previous calls to wait_until() may have accumulated state that would be lost when returning EINTR to userspace.)

It is up to the caller (the “waiter”) to make sure that it synchronizes with any object that triggers an event (the “notifier”). This Waiter does not provide any synchronization itself. Note that synchronization between the “waiter” the “notifier” may be provided by the EventHandler used to handle an event iff the waiter observes the side-effects of the handler (e.g. reading the ready list modified by EventHandler::Enqueue or [EventHandler::EnqueueOnce]).

Source

pub fn wake_immediately(&self, events: FdEvents, handler: EventHandler)

Source

pub fn wake_on_zircon_signals( &self, handle: &dyn AsHandleRef, zx_signals: Signals, handler: SignalHandler, ) -> Result<PortWaitCanceler, Status>

Establish an asynchronous wait for the signals on the given Zircon handle (not to be confused with POSIX signals), optionally running a FnOnce.

Returns a PortWaitCanceler that can be used to cancel the wait.

Source

pub fn fake_wait(&self) -> WaitCanceler

Return a WaitCanceler representing a wait that will never complete. Useful for stub implementations that should block forever even though a real implementation would wake up eventually.

Source

pub fn notify(&self)

Source

pub fn interrupt(&self)

Interrupt the waiter to deliver a signal. The wait operation will return EINTR, and a typical caller should then unwind to the syscall dispatch loop to let the signal be processed. See wait_until() for more details.

Ignored if the waiter was created with new_ignoring_signals().

Trait Implementations§

Source§

impl Clone for Waiter

Source§

fn clone(&self) -> Waiter

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Waiter

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Waiter

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Drop for Waiter

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl PartialEq<Waiter> for WaiterRef

Source§

fn eq(&self, other: &Waiter) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialEq for Waiter

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

§

impl Freeze for Waiter

§

impl !RefUnwindSafe for Waiter

§

impl Send for Waiter

§

impl Sync for Waiter

§

impl Unpin for Waiter

§

impl !UnwindSafe for Waiter

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> InstanceFromServiceTransport<T> for T

§

fn from_service_transport(handle: T) -> T

Converts the given service transport handle of type T to [Self]
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T, U> Into32<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_32(self) -> U

Source§

impl<T, U> Into64<U> for T
where U: MultiArchFrom<T>,

Source§

fn into_64(self) -> U

Source§

impl<T> IntoAny for T
where T: 'static + Send + Sync,

Source§

fn into_any(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Cast the given object into a dyn std::any::Any.
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
§

impl<T, U> IntoExt<U> for T
where U: FromExt<T>,

§

fn into_ext(self) -> U

Performs the conversion.
Source§

impl<T, U> IntoFidl<U> for T
where U: FromFidl<T>,

Source§

fn into_fidl(self) -> U

Source§

impl<T, U> MultiArchFrom<T> for U
where U: From<T>,

Source§

fn from_64(value: T) -> U

Source§

fn from_32(value: T) -> U

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T, U> TryIntoExt<U> for T
where U: TryFromExt<T>,

§

type Error = <U as TryFromExt<T>>::Error

§

fn try_into_ext(self) -> Result<U, <T as TryIntoExt<U>>::Error>

Tries to perform the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<St> WithTag for St

§

fn tagged<T>(self, tag: T) -> Tagged<T, St>

Produce a new stream from this one which yields item tupled with a constant tag
Source§

impl<B, A> LockBefore<B> for A
where B: LockAfter<A>,

Source§

impl<B, A> LockEqualOrBefore<B> for A
where A: LockBefore<B>,

§

impl<E> RunsTransport<Mpsc> for E

§

impl<E> RunsTransport<Mpsc> for E
where E: RunsTransport<Mpsc>,