std::unique_ptr FsDropInService::create()

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());
}