Skip to main content

UserAnchor

Struct UserAnchor 

Source
pub struct UserAnchor<U> { /* private fields */ }
Expand description

Non-owning weak capability to the user lane (address-table endpoint). Holds no liveness: the lane closes when the last counting UserSender drops even while anchors are held. Every delivery first atomically acquires a temporary live UserSender, so a delivery racing the last sender drop either linearizes entirely before UserLaneClosed or fails with its payload entirely after.

Under cfg(loom) the anchor holds a strong Arc instead of a Weak (loom’s Arc has no downgrade): the semantic liveness is governed by the senders counter, NOT the strong count, so the model stays faithful — the strong-ref distinction is pure memory reclamation, covered on hardware by tests/leak.rs.

Implementations§

Source§

impl<U> UserAnchor<U>

Source

pub fn upgrade(&self) -> Option<UserSender<U>>

Acquire a temporary live UserSender iff the lane is still open.

The liveness increment is CONDITIONAL and atomic — one read-modify- write loop over the live-sender count that succeeds only while the count is nonzero. It never increments zero, so it can never resurrect a closed lane; a last-sender drop racing this upgrade is caught by the RMW reading zero, and the upgrade then fails with no side effect. The returned sender counts as live until dropped — held across an async send, released on success, error, or cancellation.

Source

pub async fn send(&self, item: U) -> Result<(), UserClosed<U>>

Enqueue a user message through a temporary live sender, awaiting capacity (backpressure). The temporary sender stays alive across the await — the lane cannot close while the delivery is in flight — and is dropped on success, error, or future cancellation, releasing its temporary liveness.

§Errors

Returns UserClosed carrying item if the lane is closed (no live counting sender, or the consumer is gone).

Source

pub fn try_send(&self, item: U) -> Result<(), TrySendError<U>>

Enqueue a user message without blocking, through a temporary live sender.

§Errors

TrySendError::Closed carrying item if the lane is closed (no live counting sender, or the consumer is gone); TrySendError::Full if the lane is at capacity.

Trait Implementations§

Source§

impl<U> Clone for UserAnchor<U>

Source§

fn clone(&self) -> Self

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

Auto Trait Implementations§

§

impl<U> Freeze for UserAnchor<U>

§

impl<U> !RefUnwindSafe for UserAnchor<U>

§

impl<U> Send for UserAnchor<U>
where U: Send,

§

impl<U> Sync for UserAnchor<U>
where U: Send,

§

impl<U> Unpin for UserAnchor<U>

§

impl<U> UnsafeUnpin for UserAnchor<U>

§

impl<U> !UnwindSafe for UserAnchor<U>

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
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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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