Skip to main content

dope_sys/ring/register/
mod.rs

1use o3::base::num::bounded;
2
3use crate::{
4    io::{Close, reactor::complete},
5    memory,
6    ring::{Access, map},
7};
8mod occupied;
9mod registry;
10mod remove;
11
12pub use occupied::Occupied;
13pub use registry::Registry;
14pub use remove::Remove;
15
16/// Removing the current thread's registered ring descriptor from the kernel.
17#[derive(Clone, Copy, Debug, Eq, PartialEq)]
18pub struct Unregister;
19
20/// Registered CQ publication remains pending until published or refreshed.
21pub trait Registered: Access + Close {
22    type Entry: complete::Entry<Token = Self::Token>;
23
24    fn acquire(&mut self);
25    fn pop(&mut self) -> Option<Self::Entry>;
26    fn publish(&mut self);
27    fn refresh(&mut self) -> bounded::U32<0, { u32::MAX }>;
28}
29
30/// Registration failure owns the ring until its mappings have closed.
31pub trait Registration: Sized {
32    type Error: Copy;
33    type Unmap;
34    type Cleanup: memory::Cleanup<Self::Error, Error = map::Failure<Self::Unmap>>;
35
36    fn try_close(self) -> Result<Self::Error, Self::Cleanup>;
37}