int InputZeroMQReader::GetNextFrame(void* buffer) { const size_t framesize = 6144; if (not worker_.is_running()) { return 0; } std::shared_ptr<std::vector<uint8_t> > incoming; /* Do some prebuffering because reads will happen in bursts * (4 ETI frames in TM1) and we should make sure that * we can serve the data required for a full transmission frame. */ if (in_messages_.size() < 4) { const size_t prebuffering = 10; etiLog.log(trace, "ZMQ,wait1"); in_messages_.wait_and_pop(incoming, prebuffering); } else { etiLog.log(trace, "ZMQ,wait2"); in_messages_.wait_and_pop(incoming); } etiLog.log(trace, "ZMQ,pop"); if (not worker_.is_running()) { throw zmq_input_overflow(); } memcpy(buffer, &incoming->front(), framesize); return framesize; }
int InputZeroMQReader::GetNextFrame(void* buffer) { const size_t framesize = 6144; uint8_t* incoming; in_messages_.wait_and_pop(incoming); if (! workerdata_.running) { throw zmq_input_overflow(); } memcpy(buffer, incoming, framesize); delete incoming; return framesize; }