From 6b1a5c83bdb6c4d0619d7c154a223f6a1d97d52d Mon Sep 17 00:00:00 2001 From: Matt Spinler Date: Tue, 7 Jan 2020 08:48:53 -0600 Subject: PEL: Close PEL FD after getPEL call To close the file descriptor returned from the getPEL D-Bus method call, use the 'Defer' sdeventplus object to schedule it to happen from the event loop. Signed-off-by: Matt Spinler Change-Id: I2b850a1c92215e7f66166cc5440d7071663065c0 --- extensions/openpower-pels/manager.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'extensions/openpower-pels/manager.cpp') diff --git a/extensions/openpower-pels/manager.cpp b/extensions/openpower-pels/manager.cpp index aec5053..a705e67 100644 --- a/extensions/openpower-pels/manager.cpp +++ b/extensions/openpower-pels/manager.cpp @@ -18,6 +18,8 @@ #include "additional_data.hpp" #include "pel.hpp" +#include + #include #include #include @@ -182,9 +184,25 @@ sdbusplus::message::unix_fd Manager::getPEL(uint32_t pelID) throw common_error::InvalidArgument(); } + scheduleFDClose(*fd); + return *fd; } +void Manager::scheduleFDClose(int fd) +{ + _fdCloserEventSource = std::make_unique( + _logManager.getBus().get_event(), + std::bind(std::mem_fn(&Manager::closeFD), this, fd, + std::placeholders::_1)); +} + +void Manager::closeFD(int fd, sdeventplus::source::EventBase& source) +{ + close(fd); + _fdCloserEventSource.reset(); +} + std::vector Manager::getPELFromOBMCID(uint32_t obmcLogID) { Repository::LogID id{Repository::LogID::Obmc(obmcLogID)}; -- cgit v1.2.1