pub struct Epoll {
interest_list: RefCell<BTreeMap<(FdId, i32), EpollEventInterest>>,
ready_events: RefCell<VecDeque<(FdId, i32)>>,
queue: RefCell<VecDeque<ThreadId>>,
}Expand description
An Epoll file descriptor connects file handles and epoll events
Fields§
§interest_list: RefCell<BTreeMap<(FdId, i32), EpollEventInterest>>A map of EpollEventInterests registered under this epoll instance. Each entry is differentiated using FdId and file descriptor value.
ready_events: RefCell<VecDeque<(FdId, i32)>>The subset of interests that is currently considered “ready”. Stored separately so we
can access it more efficiently.
This is implemented as a queue so that for level-triggered epoll, all events eventually
get returned from epoll_wait. The queue does not contain any duplicates.
queue: RefCell<VecDeque<ThreadId>>The queue of threads blocked on this epoll instance.
Trait Implementations§
Source§impl FileDescription for Epoll
impl FileDescription for Epoll
fn name(&self) -> &'static str
Source§fn metadata<'tcx>(
&self,
) -> InterpResult<'tcx, Either<Result<Metadata>, &'static str>>
fn metadata<'tcx>( &self, ) -> InterpResult<'tcx, Either<Result<Metadata>, &'static str>>
libc name so we only
support that kind of metadata on Unix targets.Source§fn destroy<'tcx>(
self,
self_id: FdId,
_communicate_allowed: bool,
ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Result<()>>
fn destroy<'tcx>( self, self_id: FdId, _communicate_allowed: bool, ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Result<()>>
fn as_unix<'tcx>(&self, _ecx: &MiriInterpCx<'tcx>) -> &dyn UnixFileDescription
Source§fn read<'tcx>(
self: FileDescriptionRef<Self>,
_communicate_allowed: bool,
_ptr: Pointer,
_len: usize,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn read<'tcx>( self: FileDescriptionRef<Self>, _communicate_allowed: bool, _ptr: Pointer, _len: usize, _ecx: &mut MiriInterpCx<'tcx>, _finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr.
len indicates how many bytes we should try to read. Read moreSource§fn write<'tcx>(
self: FileDescriptionRef<Self>,
_communicate_allowed: bool,
_ptr: Pointer,
_len: usize,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn write<'tcx>( self: FileDescriptionRef<Self>, _communicate_allowed: bool, _ptr: Pointer, _len: usize, _ecx: &mut MiriInterpCx<'tcx>, _finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr.
len indicates how many bytes we should try to write. Read moreSource§fn short_fd_operations(&self) -> bool
fn short_fd_operations(&self) -> bool
Source§fn seek<'tcx>(
&self,
_communicate_allowed: bool,
_offset: SeekFrom,
) -> InterpResult<'tcx, Result<u64>>
fn seek<'tcx>( &self, _communicate_allowed: bool, _offset: SeekFrom, ) -> InterpResult<'tcx, Result<u64>>
fn is_tty(&self, _communicate_allowed: bool) -> bool
Source§fn get_flags<'tcx>(
&self,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Scalar>
fn get_flags<'tcx>( &self, _ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Scalar>
Source§fn set_flags<'tcx>(
&self,
_flag: i32,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, Scalar>
fn set_flags<'tcx>( &self, _flag: i32, _ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, Scalar>
Source§impl UnixFileDescription for Epoll
impl UnixFileDescription for Epoll
Source§fn pread<'tcx>(
&self,
_communicate_allowed: bool,
_offset: u64,
_ptr: Pointer,
_len: usize,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn pread<'tcx>( &self, _communicate_allowed: bool, _offset: u64, _ptr: Pointer, _len: usize, _ecx: &mut MiriInterpCx<'tcx>, _finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr from a given offset.
len indicates how many bytes we should try to read.
dest is where the return value should be stored: number of bytes read, or -1 in case of error.Source§fn pwrite<'tcx>(
&self,
_communicate_allowed: bool,
_ptr: Pointer,
_len: usize,
_offset: u64,
_ecx: &mut MiriInterpCx<'tcx>,
_finish: DynMachineCallback<'tcx, Result<usize, IoError>>,
) -> InterpResult<'tcx>
fn pwrite<'tcx>( &self, _communicate_allowed: bool, _ptr: Pointer, _len: usize, _offset: u64, _ecx: &mut MiriInterpCx<'tcx>, _finish: DynMachineCallback<'tcx, Result<usize, IoError>>, ) -> InterpResult<'tcx>
ptr starting at a given offset.
ptr is the pointer to the user supplied read buffer.
len indicates how many bytes we should try to write.
dest is where the return value should be stored: number of bytes written, or -1 in case of error.fn flock<'tcx>( &self, _communicate_allowed: bool, _op: FlockOp, ) -> InterpResult<'tcx, Result<()>>
Source§fn ioctl<'tcx>(
&self,
_op: Scalar,
_arg: Option<&OpTy<'tcx>>,
_ecx: &mut MiriInterpCx<'tcx>,
) -> InterpResult<'tcx, i32>
fn ioctl<'tcx>( &self, _op: Scalar, _arg: Option<&OpTy<'tcx>>, _ecx: &mut MiriInterpCx<'tcx>, ) -> InterpResult<'tcx, i32>
op is the device-dependent operation code. It’s either a c_long or c_int, depending on
the target and whether it uses glibc or musl.
arg is the optional third argument which exists depending on the operation code. It’s either
an integer or a pointer.Source§fn epoll_active_events<'tcx>(&self) -> InterpResult<'tcx, EpollReadiness>
fn epoll_active_events<'tcx>(&self) -> InterpResult<'tcx, EpollReadiness>
Source§impl VisitProvenance for Epoll
impl VisitProvenance for Epoll
fn visit_provenance(&self, _visit: &mut VisitWith<'_>)
Auto Trait Implementations§
impl !Freeze for Epoll
impl !RefUnwindSafe for Epoll
impl !Sync for Epoll
impl Send for Epoll
impl Unpin for Epoll
impl UnsafeUnpin for Epoll
impl UnwindSafe for Epoll
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FileDescriptionExt for Twhere
T: FileDescription + 'static,
impl<T> FileDescriptionExt for Twhere
T: FileDescription + 'static,
fn into_rc_any(self: FileDescriptionRef<T>) -> Rc<dyn Any>
Source§fn close_ref<'tcx>(
self: FileDescriptionRef<T>,
communicate_allowed: bool,
ecx: &mut InterpCx<'tcx, MiriMachine<'tcx>>,
) -> InterpResult<'tcx, Result<(), Error>>
fn close_ref<'tcx>( self: FileDescriptionRef<T>, communicate_allowed: bool, ecx: &mut InterpCx<'tcx, MiriMachine<'tcx>>, ) -> InterpResult<'tcx, Result<(), Error>>
close function generically, so both handle Rc::into_inner
and epoll interest management.Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 112 bytes