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

◆ queue_pending_processor_op()

bool MayaFlux::Buffers::BufferProcessingChain::queue_pending_processor_op ( const std::shared_ptr< BufferProcessor > &  processor,
const std::shared_ptr< Buffer > &  buffer,
bool  is_addition,
std::string *  rejection_reason = nullptr 
)
private

Definition at line 345 of file BufferProcessingChain.cpp.

346{
347 for (auto& m_pending_op : m_pending_ops) {
348 bool expected = false;
349 if (m_pending_op.active.compare_exchange_strong(
350 expected, true,
351 std::memory_order_acquire,
352 std::memory_order_relaxed)) {
353
354 m_pending_op.processor = processor;
355 m_pending_op.buffer = buffer;
356 m_pending_op.is_addition = is_addition;
357 m_pending_count.fetch_add(1, std::memory_order_relaxed);
358 return true;
359 }
360 }
361
362 // Queue full - drop operation (true lock-free behavior)
363 if (rejection_reason && is_addition) {
364 *rejection_reason = "Processor operation queue full";
365 }
366 return false;
367}
PendingProcessorOp m_pending_ops[MAX_PENDING_PROCESSORS]

References m_pending_count, and m_pending_ops.

Referenced by add_processor(), and remove_processor().

+ Here is the caller graph for this function: