in src/oomd/Log.cpp [141:178]
void Log::ioThread(std::ostream& debug_sink) {
bool io_thread_running = true;
while (io_thread_running) {
std::vector<std::string>* q = nullptr;
size_t numDiscarded;
// Swap the rx/tx queues
{
std::unique_lock<std::mutex> lock(state_.lock);
q = state_.getCurrentQueue();
// Wait until we have stuff to write
state_.cv.wait(
lock, [this, q] { return !state_.ioThreadRunning || q->size(); });
io_thread_running = state_.ioThreadRunning;
numDiscarded = state_.numDiscarded;
state_.curSize = 0;
state_.numDiscarded = 0;
state_.ioTick++; // flips the last bit that getCurrentQueue uses
}
for (auto& buf : *q) {
debug_sink << buf;
}
if (numDiscarded) {
debug_sink << "...\n" << numDiscarded << " messages dropped\n...\n";
}
debug_sink << std::flush;
// clear() doesn't shrink capacity, only invalidates contents
q->clear();
}
}