pub struct ProvidedBufferRing { /* private fields */ }Expand description
Groupe de buffers fournis ring-mapped (IORING_REGISTER_PBUF_RING, 22).
Possède l’anneau de descripteurs et la mémoire de données tant que le
groupe est enregistré ; ProvidedBufferRing::unregister les restitue
(désenregistre puis libère). Les buffers consommés sont rendus au groupe
par la libération du guard ProvidedBuffer.
Implementations§
Source§impl ProvidedBufferRing
impl ProvidedBufferRing
Sourcepub fn register(
ring: &mut IoUring,
group_id: u16,
count: NonZeroU16,
buf_size: NonZeroU32,
opts: ProvidedBufferRingOptions,
) -> Result<Self, Errno>
pub fn register( ring: &mut IoUring, group_id: u16, count: NonZeroU16, buf_size: NonZeroU32, opts: ProvidedBufferRingOptions, ) -> Result<Self, Errno>
IORING_REGISTER_PBUF_RING (22) : enregistre un groupe group_id de
count buffers de buf_size octets (count puissance de 2), puis
approvisionne les count buffers.
§Errors
[Errno::EINVAL] si count n’est pas une puissance de 2 ou si
count × buf_size déborde ; erreurs de mmap/io_uring_register
([Errno::ENOMEM], [Errno::EEXIST] si group_id déjà pris).
Sourcepub fn unregister(self, ring: &mut IoUring) -> Result<(), Errno>
pub fn unregister(self, ring: &mut IoUring) -> Result<(), Errno>
IORING_UNREGISTER_PBUF_RING (23) : désenregistre le groupe et libère
l’anneau et la mémoire de données (à la consommation de self).
Sûreté par construction : un ProvidedBuffer en cours de traitement
emprunte le groupe &mut — impossible de désenregistrer tant qu’il vit.
Le code suivant ne compile pas :
let mut group = ProvidedBufferRing::register(
ring, 0, NonZeroU16::new(4).unwrap(), NonZeroU32::new(64).unwrap(),
ProvidedBufferRingOptions::default()).unwrap();
let buf = completion.into_provided_buffer(&mut group).unwrap(); // emprunte `group`
let _ = group.unregister(ring).unwrap(); // déplace `group`…
let _ = buf.id(); // …emprunt encore vivant ⇒ ERREUR§Errors
Erreurs de io_uring_register ([Errno::EINVAL] si le groupe n’est pas
enregistré). En cas d’erreur, la mémoire est tout de même libérée.