seize
seize copied to clipboard
Fast, efficient, and robust memory reclamation for Rust.
QSBR
Applications that are constantly entering and leaving are marking threads as active/inactive for no reason; there is little benefit if threads are active 99% of the time. We could instead...
Rename `flush` to `repin` (or a better name?) and add a real flush operation that tries to retire the local batch to be more consistent with `crossbeam-epoch`'s API.
We can support dynamically sized types by generalizing `Linked` to `unsafe trait AsLink`.
See https://github.com/jonhoo/flurry/issues/80#issuecomment-1082309088.
The difference between `guard.retire` and `collector.retire` (that `guard.retire` is deferred till the guard is dropped) is too subtle. One of the two should probably be renamed.
Should unprotected guards still defer reclamation until the guard is dropped? This would avoid causing compatibility issues and accidental unsoundness. [`crossbeam-epoch`](https://docs.rs/crossbeam-epoch/latest/crossbeam_epoch/struct.Guard.html#method.defer_destroy) retires immediately, as a reference point.
https://dl.acm.org/doi/pdf/10.1145/3627535.3638491 suggests that batch freeing bypasses thread-local allocator buffers, and freeing from a remote thread, which is extremely expensive (note that mimalloc avoids this problems, but about every other allocator...
Recursive calls to `retire` inside a reclaimer were previously unsound because mutable pointers to local batches were held during reclamation. This PR also adds a `reclaim_all` function, which can be...
It can be useful, rarely, to have access to the `Collector` inside of the reclaimer, such as retiring a `Deferred` after reclamation.
I recently tracked down a bug in some code caused by my incorrect assumption about `Collector::clone`: I assumed it would behave like an `Arc` in maintaining a reference to the...