Skip to content
Snippets Groups Projects
Commit 9374ce81 authored by Craig Tiller's avatar Craig Tiller
Browse files

Add comments, fix a subtle bug

parent 8f615526
No related branches found
No related tags found
No related merge requests found
...@@ -69,6 +69,7 @@ class Server GRPC_FINAL : public GrpcLibrary, private CallHook { ...@@ -69,6 +69,7 @@ class Server GRPC_FINAL : public GrpcLibrary, private CallHook {
ShutdownInternal(TimePoint<T>(deadline).raw_time()); ShutdownInternal(TimePoint<T>(deadline).raw_time());
} }
// Shutdown the server, waiting for all rpc processing to finish.
void Shutdown() { ShutdownInternal(gpr_inf_future(GPR_CLOCK_MONOTONIC)); } void Shutdown() { ShutdownInternal(gpr_inf_future(GPR_CLOCK_MONOTONIC)); }
// Block waiting for all work to complete (the server must either // Block waiting for all work to complete (the server must either
......
...@@ -329,11 +329,15 @@ void Server::ShutdownInternal(gpr_timespec deadline) { ...@@ -329,11 +329,15 @@ void Server::ShutdownInternal(gpr_timespec deadline) {
shutdown_ = true; shutdown_ = true;
grpc_server_shutdown_and_notify(server_, cq_.cq(), new ShutdownRequest()); grpc_server_shutdown_and_notify(server_, cq_.cq(), new ShutdownRequest());
cq_.Shutdown(); cq_.Shutdown();
// Spin, eating requests until the completion queue is completely shutdown.
// If the deadline expires then cancel anything that's pending and keep
// spinning forever until the work is actually drained.
SyncRequest* request; SyncRequest* request;
bool ok; bool ok;
while (SyncRequest::AsyncWait(&cq_, &request, &ok, deadline)) { while (SyncRequest::AsyncWait(&cq_, &request, &ok, deadline)) {
if (request == NULL) { // deadline expired if (request == NULL) { // deadline expired
grpc_server_cancel_all_calls(server_); grpc_server_cancel_all_calls(server_);
deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
} else if (ok) { } else if (ok) {
SyncRequest::CallData call_data(this, request); SyncRequest::CallData call_data(this, request);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment