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