From c6d61c4dd6deb80477cb5977b79b00614b20b409 Mon Sep 17 00:00:00 2001 From: ctiller Date: Mon, 15 Dec 2014 14:52:08 -0800 Subject: GOAWAY & Reconnection support. Clients stay connected to a server after it shutdowns until all active calls have completed, and then they drop. After a GOAWAY or a disconnect, clients will attempt to re-resolve and reconnect to the server. Change on 2014/12/15 by ctiller ------------- Created by MOE: http://code.google.com/p/moe-java MOE_MIGRATED_REVID=82178515 --- src/core/iomgr/tcp_server_posix.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/core/iomgr/tcp_server_posix.c') diff --git a/src/core/iomgr/tcp_server_posix.c b/src/core/iomgr/tcp_server_posix.c index 22bbd45351..2abaf15ce4 100644 --- a/src/core/iomgr/tcp_server_posix.c +++ b/src/core/iomgr/tcp_server_posix.c @@ -97,8 +97,13 @@ grpc_tcp_server *grpc_tcp_server_create() { return s; } +static void done_destroy(void *p, grpc_iomgr_cb_status status) { + gpr_event_set(p, (void *)1); +} + void grpc_tcp_server_destroy(grpc_tcp_server *s) { size_t i; + gpr_event fd_done; gpr_mu_lock(&s->mu); /* shutdown all fd's */ for (i = 0; i < s->nports; i++) { @@ -113,7 +118,9 @@ void grpc_tcp_server_destroy(grpc_tcp_server *s) { /* delete ALL the things */ for (i = 0; i < s->nports; i++) { server_port *sp = &s->ports[i]; - grpc_fd_destroy(sp->emfd); + gpr_event_init(&fd_done); + grpc_fd_destroy(sp->emfd, done_destroy, &fd_done); + gpr_event_wait(&fd_done, gpr_inf_future); } gpr_free(s->ports); gpr_free(s); -- cgit v1.2.3