in lib/ProducerImpl.cc [635:658]
Result ProducerImpl::canEnqueueRequest(uint32_t payloadSize) {
if (conf_.getBlockIfQueueFull()) {
if (semaphore_ && !semaphore_->acquire()) {
return ResultInterrupted;
}
if (!memoryLimitController_.reserveMemory(payloadSize)) {
return ResultInterrupted;
}
return ResultOk;
} else {
if (semaphore_ && !semaphore_->tryAcquire()) {
return ResultProducerQueueIsFull;
}
if (!memoryLimitController_.tryReserveMemory(payloadSize)) {
if (semaphore_) {
semaphore_->release(1);
}
return ResultMemoryBufferIsFull;
}
return ResultOk;
}
}