Skip to content

Commit 25ca855

Browse files
committed
Make blocking_epoll_callback a private function
1 parent 7e8ca57 commit 25ca855

File tree

1 file changed

+41
-43
lines changed
  • src/tools/miri/src/shims/unix/linux

1 file changed

+41
-43
lines changed

src/tools/miri/src/shims/unix/linux/epoll.rs

Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
476476
}
477477
if timeout == 0 || !ready_list_empty {
478478
// If the ready list is not empty, or the timeout is 0, we can return immediately.
479-
this.blocking_epoll_callback(epfd_value, weak_epfd, dest, &event)?;
479+
blocking_epoll_callback(epfd_value, weak_epfd, dest, &event, this)?;
480480
} else {
481481
// Blocking
482482
let timeout = match timeout {
@@ -504,7 +504,7 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
504504
event: MPlaceTy<'tcx>,
505505
}
506506
@unblock = |this| {
507-
this.blocking_epoll_callback(epfd_value, weak_epfd, &dest, &event)?;
507+
blocking_epoll_callback(epfd_value, weak_epfd, &dest, &event, this)?;
508508
Ok(())
509509
}
510510
@timeout = |this| {
@@ -526,47 +526,6 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
526526
Ok(())
527527
}
528528

529-
/// Callback function after epoll_wait unblocks
530-
fn blocking_epoll_callback(
531-
&mut self,
532-
epfd_value: i32,
533-
weak_epfd: WeakFileDescriptionRef,
534-
dest: &MPlaceTy<'tcx>,
535-
events: &MPlaceTy<'tcx>,
536-
) -> InterpResult<'tcx> {
537-
let this = self.eval_context_mut();
538-
539-
let Some(epfd) = weak_epfd.upgrade() else {
540-
throw_unsup_format!("epoll FD {epfd_value} got closed while blocking.")
541-
};
542-
543-
let epoll_file_description = epfd
544-
.downcast::<Epoll>()
545-
.ok_or_else(|| err_unsup_format!("non-epoll FD passed to `epoll_wait`"))?;
546-
547-
let ready_list = epoll_file_description.get_ready_list();
548-
let mut ready_list = ready_list.borrow_mut();
549-
let mut num_of_events: i32 = 0;
550-
let mut array_iter = this.project_array_fields(events)?;
551-
552-
while let Some(des) = array_iter.next(this)? {
553-
if let Some(epoll_event_instance) = ready_list_next(this, &mut ready_list) {
554-
this.write_int_fields_named(
555-
&[
556-
("events", epoll_event_instance.events.into()),
557-
("u64", epoll_event_instance.data.into()),
558-
],
559-
&des.1,
560-
)?;
561-
num_of_events = num_of_events.strict_add(1);
562-
} else {
563-
break;
564-
}
565-
}
566-
this.write_int(num_of_events, dest)?;
567-
Ok(())
568-
}
569-
570529
/// For a specific file description, get its ready events and update the corresponding ready
571530
/// list. This function should be called whenever an event causes more bytes or an EOF to become
572531
/// newly readable from an FD, and whenever more bytes can be written to an FD or no more future
@@ -665,3 +624,42 @@ fn check_and_update_one_event_interest<'tcx>(
665624
}
666625
return Ok(false);
667626
}
627+
628+
/// Callback function after epoll_wait unblocks
629+
fn blocking_epoll_callback<'tcx>(
630+
epfd_value: i32,
631+
weak_epfd: WeakFileDescriptionRef,
632+
dest: &MPlaceTy<'tcx>,
633+
events: &MPlaceTy<'tcx>,
634+
ecx: &mut MiriInterpCx<'tcx>,
635+
) -> InterpResult<'tcx> {
636+
let Some(epfd) = weak_epfd.upgrade() else {
637+
throw_unsup_format!("epoll FD {epfd_value} got closed while blocking.")
638+
};
639+
640+
let epoll_file_description = epfd
641+
.downcast::<Epoll>()
642+
.ok_or_else(|| err_unsup_format!("non-epoll FD passed to `epoll_wait`"))?;
643+
644+
let ready_list = epoll_file_description.get_ready_list();
645+
let mut ready_list = ready_list.borrow_mut();
646+
let mut num_of_events: i32 = 0;
647+
let mut array_iter = ecx.project_array_fields(events)?;
648+
649+
while let Some(des) = array_iter.next(ecx)? {
650+
if let Some(epoll_event_instance) = ready_list_next(ecx, &mut ready_list) {
651+
ecx.write_int_fields_named(
652+
&[
653+
("events", epoll_event_instance.events.into()),
654+
("u64", epoll_event_instance.data.into()),
655+
],
656+
&des.1,
657+
)?;
658+
num_of_events = num_of_events.strict_add(1);
659+
} else {
660+
break;
661+
}
662+
}
663+
ecx.write_int(num_of_events, dest)?;
664+
Ok(())
665+
}

0 commit comments

Comments
 (0)