Allow to get the size of the queue.

master
Chunting Gu 6 years ago
parent ad1016734e
commit 4c413e245d

@ -31,7 +31,6 @@ int main(int argc, char* argv[]) {
if (auto file_body = r->file_body()) {
file_body->Move(path);
}
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}

@ -103,7 +103,7 @@ ResponsePtr ClientSession::DoSend(RequestPtr request, bool stream) {
client->set_ssl_verify(ssl_verify_);
client->set_buffer_size(buffer_size_);
client->set_timeout(timeout_);
Error error = client->Request(request, !reuse, stream);
if (error) {

@ -54,9 +54,14 @@ public:
not_empty_cv_.notify_one();
}
std::size_t Size() const {
std::lock_guard<std::mutex> lock(mutex_);
return message_list_.size();
}
private:
std::list<T> message_list_;
std::mutex mutex_;
mutable std::mutex mutex_;
std::condition_variable not_empty_cv_;
};

@ -250,10 +250,13 @@ void Server::WorkerRoutine() {
void Server::StopWorkers() {
LOG_INFO("Stopping workers...");
// Clear pending connections.
// The connections will be closed later.
LOG_INFO("Clear pending connections...");
queue_.Clear();
// Clear/drop pending connections.
// The connections will be closed later (see DoStop).
// Alternatively, we can wait for the pending connections to be handled.
if (queue_.Size() != 0) {
LOG_INFO("Clear pending connections...");
queue_.Clear();
}
// Enqueue a null connection to trigger the first worker to stop.
queue_.Push(ConnectionPtr());

Loading…
Cancel
Save