in src/oomd/dropin/FsDropInService.cpp [39:72]
std::unique_ptr<FsDropInService> FsDropInService::create(
const std::string& cgroup_fs,
const Config2::IR::Root& root,
Engine::Engine& engine,
const std::string& drop_in_dir) {
if (drop_in_dir.size() == 0) {
return nullptr;
}
Fs::Fd epollfd(::epoll_create1(EPOLL_CLOEXEC));
if (epollfd.fd() < 0) {
OLOG << "epoll_create1: " << Util::strerror_r();
return nullptr;
}
Fs::Fd terminatefd(::eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK));
if (terminatefd.fd() < 0) {
OLOG << "eventfd: " << Util::strerror_r();
return nullptr;
}
struct epoll_event ev;
ev.events = EPOLLIN;
ev.data.fd = terminatefd.fd();
if (::epoll_ctl(epollfd.fd(), EPOLL_CTL_ADD, terminatefd.fd(), &ev) < 0) {
OLOG << "epoll_ctl: " << Util::strerror_r();
return nullptr;
}
return std::make_unique<FsDropInService>(
Tag{},
cgroup_fs,
root,
engine,
drop_in_dir,
std::move(epollfd).fd(),
std::move(terminatefd).fd());
}