From 64f5101b30674d41f622a4ef03cf7c56891780b9 Mon Sep 17 00:00:00 2001 From: Davide Bertola Date: Thu, 2 Jun 2022 20:26:29 +0200 Subject: [PATCH] program: remove 'detach' from unload() ...also fix code doc --- aya/src/programs/mod.rs | 69 ++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/aya/src/programs/mod.rs b/aya/src/programs/mod.rs index a6f6b5af..1b9a2926 100644 --- a/aya/src/programs/mod.rs +++ b/aya/src/programs/mod.rs @@ -386,15 +386,15 @@ impl ProgramData { } } -fn unload_program(data: &mut ProgramData, detach: bool) -> Result<(), ProgramError> { - if detach { - data.links.remove_all()?; - } - let fd = data.fd_or_err()?; - unsafe { - libc::close(fd); +fn unload_program(data: &mut ProgramData) -> Result<(), ProgramError> { + data.links.remove_all()?; + if let Some(fd) = data.fd.take() { + unsafe { + libc::close(fd); + } + } else { + return Err(ProgramError::NotLoaded); } - data.fd = None; Ok(()) } @@ -558,10 +558,10 @@ macro_rules! impl_program_unload { impl $struct_name { /// Unloads the program from the kernel. /// - /// If `detach` is true, links will be detached before unloading the program. - /// Note that OwnedLinks you obtained using [KProbe::forget_link] will not be detached. - pub fn unload(&mut self, detach: bool) -> Result<(), ProgramError> { - unload_program(&mut self.data, detach) + /// Links will be detached before unloading the program. + /// Note that OwnedLinks you obtained using ´forget_link()´ will not be detached. + pub fn unload(&mut self) -> Result<(), ProgramError> { + unload_program(&mut self.data) } } )+ @@ -601,30 +601,29 @@ mod tests { // When a new program is added, this fn will break as a reminder: consider adding unload() // See [impl_program_unload!()] fn program_implements_unload(a: Program) { - let detach = false; let _ = match a { - Program::KProbe(mut p) => p.unload(detach), - Program::UProbe(mut p) => p.unload(detach), - Program::TracePoint(mut p) => p.unload(detach), - Program::SocketFilter(mut p) => p.unload(detach), - Program::Xdp(mut p) => p.unload(detach), - Program::SkMsg(mut p) => p.unload(detach), - Program::SkSkb(mut p) => p.unload(detach), - Program::SockOps(mut p) => p.unload(detach), - Program::SchedClassifier(mut p) => p.unload(detach), - Program::CgroupSkb(mut p) => p.unload(detach), - Program::CgroupSysctl(mut p) => p.unload(detach), - Program::CgroupSockopt(mut p) => p.unload(detach), - Program::LircMode2(mut p) => p.unload(detach), - Program::PerfEvent(mut p) => p.unload(detach), - Program::RawTracePoint(mut p) => p.unload(detach), - Program::Lsm(mut p) => p.unload(detach), - Program::BtfTracePoint(mut p) => p.unload(detach), - Program::FEntry(mut p) => p.unload(detach), - Program::FExit(mut p) => p.unload(detach), - Program::Extension(mut p) => p.unload(detach), - Program::CgroupSockAddr(mut p) => p.unload(detach), - Program::SkLookup(mut p) => p.unload(detach), + Program::KProbe(mut p) => p.unload(), + Program::UProbe(mut p) => p.unload(), + Program::TracePoint(mut p) => p.unload(), + Program::SocketFilter(mut p) => p.unload(), + Program::Xdp(mut p) => p.unload(), + Program::SkMsg(mut p) => p.unload(), + Program::SkSkb(mut p) => p.unload(), + Program::SockOps(mut p) => p.unload(), + Program::SchedClassifier(mut p) => p.unload(), + Program::CgroupSkb(mut p) => p.unload(), + Program::CgroupSysctl(mut p) => p.unload(), + Program::CgroupSockopt(mut p) => p.unload(), + Program::LircMode2(mut p) => p.unload(), + Program::PerfEvent(mut p) => p.unload(), + Program::RawTracePoint(mut p) => p.unload(), + Program::Lsm(mut p) => p.unload(), + Program::BtfTracePoint(mut p) => p.unload(), + Program::FEntry(mut p) => p.unload(), + Program::FExit(mut p) => p.unload(), + Program::Extension(mut p) => p.unload(), + Program::CgroupSockAddr(mut p) => p.unload(), + Program::SkLookup(mut p) => p.unload(), }; } }