Program Listing for File SyncSignalWrapper.cpp

Return to documentation for file (BackendLibfabric/SyncSignalWrapper.cpp)

#include "SyncSignalWrapper.hpp"

netio3::libfabric::SyncSignalWrapper::SyncSignalWrapper(BaseEventLoop* event_loop,
                                                        std::function<void()> cb,
                                                        bool use_semaphore) :
  m_event_loop{event_loop},
  m_signal{std::make_unique<EventSignalHandle>(
    m_event_loop->create_signal([cb](int) { cb(); },
                                use_semaphore,
                                [this](int) { on_unregistered(); }))}
{}

netio3::libfabric::SyncSignalWrapper::~SyncSignalWrapper()
{
  m_signal.reset();
  if (m_event_loop->is_running()) {
    m_unregistered.wait(false);
  }
}

void netio3::libfabric::SyncSignalWrapper::fire() const
{
  m_signal->fire();
}

void netio3::libfabric::SyncSignalWrapper::on_unregistered()
{
  m_unregistered = true;
  m_unregistered.notify_one();
}