pub(crate) struct Global {
    locals: List<Local>,
    queue: Queue<SealedBag>,
    pub(crate) epoch: CachePadded<AtomicEpoch>,
}
Expand description

The global data for a garbage collector.

Fields§

§locals: List<Local>

The intrusive linked list of Locals.

§queue: Queue<SealedBag>

The global queue of bags of deferred functions.

§epoch: CachePadded<AtomicEpoch>

The global epoch.

Implementations§

source§

impl Global

source

const COLLECT_STEPS: usize = 8usize

Number of bags to destroy.

source

pub(crate) fn new() -> Self

Creates a new global data for garbage collection.

source

pub(crate) fn push_bag(&self, bag: &mut Bag, guard: &Guard)

Pushes the bag into the global queue and replaces the bag with a new empty bag.

source

pub(crate) fn collect(&self, guard: &Guard)

Collects several bags from the global queue and executes deferred functions in them.

Note: This may itself produce garbage and in turn allocate new bags.

pin() rarely calls collect(), so we want the compiler to place that call on a cold path. In other words, we want the compiler to optimize branching for the case when collect() is not called.

source

pub(crate) fn try_advance(&self, guard: &Guard) -> Epoch

Attempts to advance the global epoch.

The global epoch can advance only if all currently pinned participants have been pinned in the current epoch.

Returns the current global epoch.

try_advance() is annotated #[cold] because it is rarely called.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Global

§

impl Send for Global

§

impl !Sync for Global

§

impl Unpin for Global

§

impl !UnwindSafe for Global

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 Twhere 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> Pointable for T

source§

const ALIGN: usize = const ALIGN: usize = mem::align_of::<T>();

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

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

Initializes a with the given initializer. Read more
source§

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

Dereferences the given pointer. Read more
source§

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

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

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

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

§

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 Twhere U: TryFrom<T>,

§

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.