summaryrefslogtreecommitdiffstats
path: root/extensions/openpower-pels/manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/openpower-pels/manager.cpp')
-rw-r--r--extensions/openpower-pels/manager.cpp18
1 files changed, 18 insertions, 0 deletions
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 <unistd.h>
+
#include <filesystem>
#include <fstream>
#include <xyz/openbmc_project/Common/error.hpp>
@@ -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<sdeventplus::source::Defer>(
+ _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<uint8_t> Manager::getPELFromOBMCID(uint32_t obmcLogID)
{
Repository::LogID id{Repository::LogID::Obmc(obmcLogID)};
OpenPOWER on IntegriCloud