Allow destroy to be delayed instead of stalling

pull/1731/head
Craig Tiller 10 years ago
parent b04f072e6a
commit 0b877cecf7
  1. 13
      src/core/surface/server.c

@ -908,6 +908,10 @@ void grpc_server_listener_destroy_done(void *s) {
gpr_mu_unlock(&server->mu);
}
static void continue_server_shutdown(void *server, int iomgr_success) {
grpc_server_destroy(server);
}
void grpc_server_destroy(grpc_server *server) {
channel_data *c;
listener *l;
@ -921,15 +925,14 @@ void grpc_server_destroy(grpc_server *server) {
gpr_mu_lock(&server->mu);
}
while (server->listeners_destroyed != num_listeners(server)) {
if (server->listeners_destroyed != num_listeners(server)) {
gpr_mu_unlock(&server->mu);
for (i = 0; i < server->cq_count; i++) {
gpr_mu_unlock(&server->mu);
grpc_cq_hack_spin_pollset(server->cqs[i]);
gpr_mu_lock(&server->mu);
}
gpr_cv_wait(&server->cv, &server->mu,
gpr_time_add(gpr_now(), gpr_time_from_millis(100)));
grpc_iomgr_add_callback(continue_server_shutdown, server);
return;
}
while (server->listeners) {

Loading…
Cancel
Save