Add Server.Wait

pull/761/head
Craig Tiller 10 years ago
parent eeef8cd52b
commit 6e57b9edb1
  1. 5
      include/grpc++/server.h
  2. 25
      src/cpp/server/server.cc

@ -69,6 +69,11 @@ class Server final : private CallHook,
// Shutdown the server, block until all rpc processing finishes.
void Shutdown();
// Block waiting for all work to complete (the server must either
// be shutting down or some other thread must call Shutdown for this
// function to ever return)
void Wait();
private:
friend class ServerBuilder;

@ -265,21 +265,26 @@ bool Server::Start() {
}
void Server::Shutdown() {
{
std::unique_lock<std::mutex> lock(mu_);
if (started_ && !shutdown_) {
shutdown_ = true;
grpc_server_shutdown(server_);
cq_.Shutdown();
std::unique_lock<std::mutex> lock(mu_);
if (started_ && !shutdown_) {
shutdown_ = true;
grpc_server_shutdown(server_);
cq_.Shutdown();
// Wait for running callbacks to finish.
while (num_running_cb_ != 0) {
callback_cv_.wait(lock);
}
// Wait for running callbacks to finish.
while (num_running_cb_ != 0) {
callback_cv_.wait(lock);
}
}
}
void Server::Wait() {
std::unique_lock<std::mutex> lock(mu_);
while (num_running_cb_ != 0) {
callback_cv_.wait(lock);
}
}
void Server::PerformOpsOnCall(CallOpBuffer* buf, Call* call) {
static const size_t MAX_OPS = 8;
size_t nops = MAX_OPS;

Loading…
Cancel
Save