diff --git a/agents/statsd/src/statsd_agent.cc b/agents/statsd/src/statsd_agent.cc index 3edcb0480c..a2820cd31a 100644 --- a/agents/statsd/src/statsd_agent.cc +++ b/agents/statsd/src/statsd_agent.cc @@ -766,9 +766,14 @@ void StatsDAgent::send_stats_msg_cb_(nsuv::ns_async*, } string_vector sv; - while (agent->send_stats_msg_q_.dequeue(sv)) { + // Let configuration and shutdown callbacks run even while workers keep + // sending. + for (size_t i = 0; i < 1024 && agent->send_stats_msg_q_.dequeue(sv); i++) { agent->connection_->write(sv); } + if (!agent->send_stats_msg_q_.empty()) { + ASSERT_EQ(0, agent->send_stats_msg_.send()); + } } int StatsDAgent::send(const std::vector& sv, size_t len) {