fn process()

in src/devices/src/virtio/balloon/event_handler.rs [52:97]


    fn process(&mut self, event: Events, ops: &mut EventOps) {
        let source = event.fd();
        let event_set = event.event_set();
        let supported_events = EventSet::IN;

        if !supported_events.contains(event_set) {
            warn!(
                "Received unknown event: {:?} from source: {:?}",
                event_set, source
            );
            return;
        }

        if self.is_activated() {
            let virtq_inflate_ev_fd = self.queue_evts[INFLATE_INDEX].as_raw_fd();
            let virtq_deflate_ev_fd = self.queue_evts[DEFLATE_INDEX].as_raw_fd();
            let virtq_stats_ev_fd = self.queue_evts[STATS_INDEX].as_raw_fd();
            let stats_timer_fd = self.stats_timer.as_raw_fd();
            let activate_fd = self.activate_evt.as_raw_fd();

            // Looks better than C style if/else if/else.
            match source {
                _ if source == virtq_inflate_ev_fd => self
                    .process_inflate_queue_event()
                    .unwrap_or_else(report_balloon_event_fail),
                _ if source == virtq_deflate_ev_fd => self
                    .process_deflate_queue_event()
                    .unwrap_or_else(report_balloon_event_fail),
                _ if source == virtq_stats_ev_fd => self
                    .process_stats_queue_event()
                    .unwrap_or_else(report_balloon_event_fail),
                _ if source == stats_timer_fd => self
                    .process_stats_timer_event()
                    .unwrap_or_else(report_balloon_event_fail),
                _ if activate_fd == source => self.process_activate_event(ops),
                _ => {
                    warn!("Balloon: Spurious event received: {:?}", source);
                }
            };
        } else {
            warn!(
                "Balloon: The device is not yet activated. Spurious event received: {:?}",
                source
            );
        }
    }