|
|
|
@ -975,6 +975,11 @@ void grpc_server_setup_transport(grpc_server *s, grpc_transport *transport, |
|
|
|
|
grpc_transport_perform_op(transport, &op); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void done_published_shutdown(void *done_arg, grpc_cq_completion *storage) { |
|
|
|
|
(void) done_arg; |
|
|
|
|
gpr_free(storage); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void grpc_server_shutdown_and_notify(grpc_server *server, |
|
|
|
|
grpc_completion_queue *cq, void *tag) { |
|
|
|
|
listener *l; |
|
|
|
@ -986,6 +991,12 @@ void grpc_server_shutdown_and_notify(grpc_server *server, |
|
|
|
|
/* lock, and gather up some stuff to do */ |
|
|
|
|
gpr_mu_lock(&server->mu_global); |
|
|
|
|
grpc_cq_begin_op(cq); |
|
|
|
|
if (server->shutdown_published) { |
|
|
|
|
grpc_cq_end_op(cq, tag, 1, done_published_shutdown, NULL, |
|
|
|
|
gpr_malloc(sizeof(grpc_cq_completion))); |
|
|
|
|
gpr_mu_unlock(&server->mu_global); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
server->shutdown_tags = |
|
|
|
|
gpr_realloc(server->shutdown_tags, |
|
|
|
|
sizeof(shutdown_tag) * (server->num_shutdown_tags + 1)); |
|
|
|
|