Ver código fonte

aya: `impl AsFd for RingBuf`

This bound is needed for e.g. `smol::Async`.
Tamir Duberstein 2 dias atrás
pai
commit
3f02127b6b
2 arquivos alterados com 11 adições e 6 exclusões
  1. 1 1
      aya/src/maps/perf/perf_event_array.rs
  2. 10 5
      aya/src/maps/ring_buf.rs

+ 1 - 1
aya/src/maps/perf/perf_event_array.rs

@@ -64,7 +64,7 @@ impl<T: BorrowMut<MapData>> AsFd for PerfEventArrayBuffer<T> {
 
 impl<T: BorrowMut<MapData>> AsRawFd for PerfEventArrayBuffer<T> {
     fn as_raw_fd(&self) -> RawFd {
-        self.buf.as_fd().as_raw_fd()
+        self.as_fd().as_raw_fd()
     }
 }
 

+ 10 - 5
aya/src/maps/ring_buf.rs

@@ -9,7 +9,7 @@ use std::{
     fmt::{self, Debug, Formatter},
     mem,
     ops::Deref,
-    os::fd::{AsFd as _, AsRawFd, BorrowedFd, RawFd},
+    os::fd::{AsFd, AsRawFd, BorrowedFd, RawFd},
     sync::atomic::{AtomicU32, AtomicUsize, Ordering},
 };
 
@@ -130,15 +130,20 @@ impl<T> RingBuf<T> {
     }
 }
 
-/// Access to the RawFd can be used to construct an AsyncFd for use with epoll.
-impl<T: Borrow<MapData>> AsRawFd for RingBuf<T> {
-    fn as_raw_fd(&self) -> RawFd {
+impl<T: Borrow<MapData>> AsFd for RingBuf<T> {
+    fn as_fd(&self) -> BorrowedFd<'_> {
         let Self {
             map,
             consumer: _,
             producer: _,
         } = self;
-        map.borrow().fd().as_fd().as_raw_fd()
+        map.borrow().fd().as_fd()
+    }
+}
+
+impl<T: Borrow<MapData>> AsRawFd for RingBuf<T> {
+    fn as_raw_fd(&self) -> RawFd {
+        self.as_fd().as_raw_fd()
     }
 }