Skip to main content

OverflowPolicy

Enum OverflowPolicy 

Source
pub enum OverflowPolicy {
    Block(Duration),
    DropNewest,
}
Expand description

What a Queue does when its channel is full.

Variants§

§

Block(Duration)

Block the pushing thread until there’s room, up to Duration — the right choice for offline/file processing, where correctness matters more than staying caught up. Use Duration::MAX (what OverflowPolicy::default does) for what’s practically an unbounded wait — [Sender::send_timeout] with that duration isn’t ever going to time out in a real program.

A finite Duration is the escape hatch against the one thing an actually-unbounded wait can’t recover from: whatever’s downstream not just falling behind (ordinary backpressure, which resolves on its own as the worker keeps draining) but genuinely stuck — a Sink::consume call somewhere in the chain that never returns. An unbounded wait here would then also wedge whoever’s pushing into this Queue, and transitively every Queue upstream of that, since each one’s worker can’t get back to its own control_rx until its current downstream.consume() call returns (see Queue::control’s own docs on why control is only ever checked between buffers, not able to preempt one already in flight). Timing out bounds that: it’s what lets a Stop sent to an upstream Queue eventually reach it instead of waiting forever. Doesn’t help if the stall is inside a raw (non-Queue) Sink’s own consume() call directly — nothing here retries or times out that call itself, only the channel send. On timeout, returns QueueError::SendTimedOut rather than losing the buffer silently — unlike OverflowPolicy::DropNewest, this isn’t an expected, routine condition.

This timeout applies to ordinary data buffers only. Queue sends MediaBuffer::Eos with an unbounded send under every policy so a natural end-of-stream marker is never discarded; if downstream has stopped consuming entirely, an EOS push can therefore still block.

§

DropNewest

Drop the incoming buffer instead of blocking, and post BusEvent::Dropped. Never stalls the upstream thread — the right choice for live sources, where falling behind is worse than losing a frame.

Trait Implementations§

Source§

impl Clone for OverflowPolicy

Source§

fn clone(&self) -> OverflowPolicy

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Copy for OverflowPolicy

Source§

impl Debug for OverflowPolicy

Source§

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

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

impl Default for OverflowPolicy

Source§

fn default() -> Self

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

impl Eq for OverflowPolicy

Source§

impl PartialEq for OverflowPolicy

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for OverflowPolicy

Auto Trait Implementations§

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

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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
§

impl<T> CryptoSafe for T
where T: Send + Sync + Debug,

§

impl<T> CryptoSafe for T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more