MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ signal()

void MayaFlux::Vruta::NetworkSource::signal ( const Core::NetworkMessage message)

Signal that a message arrived (called from Asio IO thread)

Parameters
messageThe received message.

Lock-free. Pushes into ring buffer, atomically detaches the full waiter list, and calls try_resume() on every registered awaiter. Safe to call from any thread.

Definition at line 57 of file NetworkSource.cpp.

58{
59 auto* w = m_waiters_head.exchange(nullptr, std::memory_order_acq_rel);
60
61 if (w) {
62 while (w) {
63 auto* next = w->m_next.load(std::memory_order_relaxed);
64 w->deliver(message);
65 w = next;
66 }
67 } else {
68 (void)m_queue.push(message);
69 }
70}
Memory::LockFreeQueue< Core::NetworkMessage, QUEUE_CAPACITY > m_queue
std::atomic< Kriya::NetworkAwaiter * > m_waiters_head
Head of the intrusive lock-free waiter list.

References m_queue, and m_waiters_head.

Referenced by NetworkSource().

+ Here is the caller graph for this function: