diff --git a/src/libkrun/src/lib.rs b/src/libkrun/src/lib.rs index 5426bafbb..ceae52c80 100644 --- a/src/libkrun/src/lib.rs +++ b/src/libkrun/src/lib.rs @@ -444,7 +444,9 @@ fn log_level_to_filter_str(level: u32) -> &'static str { #[no_mangle] pub extern "C" fn krun_set_log_level(level: u32) -> i32 { let filter = log_level_to_filter_str(level); - env_logger::Builder::from_env(Env::default().default_filter_or(filter)).init(); + env_logger::Builder::from_env(Env::default().default_filter_or(filter)) + .format_timestamp_micros() + .init(); #[cfg(feature = "aws-nitro")] { @@ -504,7 +506,7 @@ pub unsafe extern "C" fn krun_init_log(target: RawFd, level: u32, style: u32, op builder.parse_filters(filter).parse_write_style(write_style); builder }; - builder.target(target).init(); + builder.format_timestamp_micros().target(target).init(); KRUN_SUCCESS } diff --git a/src/utils/src/macos/epoll.rs b/src/utils/src/macos/epoll.rs index f6141cd53..b694f697f 100644 --- a/src/utils/src/macos/epoll.rs +++ b/src/utils/src/macos/epoll.rs @@ -12,6 +12,18 @@ use std::time::Duration; use bitflags::bitflags; use log::debug; +fn event_name(event: u32) -> &'static str { + match event { + e if e == EventSet::IN.bits() => "READ", + e if e == EventSet::OUT.bits() => "WRITE", + e if e == (EventSet::IN | EventSet::READ_HANG_UP).bits() => "READ_EOF", + e if e == (EventSet::IN | EventSet::HANG_UP).bits() => "EOF", + e if e == EventSet::HANG_UP.bits() => "HANG_UP", + e if e == EventSet::READ_HANG_UP.bits() => "READ_HANG_UP", + _ => "UNKNOWN", + } +} + #[repr(i32)] pub enum ControlOperation { Add, @@ -263,28 +275,36 @@ impl Epoll { debug!("ret: {ret}"); - for i in 0..ret { - debug!("kev: {:?}", kevs[i as usize]); - if kevs[i as usize].0.filter == libc::EVFILT_READ { - events[i as usize].events = EventSet::IN.bits(); - } else if kevs[i as usize].0.filter == libc::EVFILT_WRITE { - events[i as usize].events = EventSet::OUT.bits(); + if ret < 0 { + return Err(io::Error::last_os_error()); + } + + let nevents = ret as usize; + + for i in 0..nevents { + if kevs[i].0.filter == libc::EVFILT_READ { + events[i].events = EventSet::IN.bits(); + } else if kevs[i].0.filter == libc::EVFILT_WRITE { + events[i].events = EventSet::OUT.bits(); } - if kevs[i as usize].0.flags & libc::EV_EOF != 0 { - events[i as usize].events |= if kevs[i as usize].0.flags & libc::EV_CLEAR != 0 { + if kevs[i].0.flags & libc::EV_EOF != 0 { + events[i].events |= if kevs[i].0.flags & libc::EV_CLEAR != 0 { EventSet::READ_HANG_UP.bits() } else { EventSet::HANG_UP.bits() }; } - events[i as usize].u64 = kevs[i as usize].udata(); + events[i].u64 = kevs[i].udata(); + + let fd = kevs[i].0.ident; + let data = kevs[i].0.data; + debug!( + "kevent: {} fd={fd} data={data}", + event_name(events[i].events) + ); } - match ret { - -1 => Err(io::Error::last_os_error()), - 0 => Ok(0), - nev => Ok(nev as usize), - } + Ok(nevents) } }