diff options
author | 2014-12-15 14:52:08 -0800 | |
---|---|---|
committer | 2014-12-15 15:39:03 -0800 | |
commit | c6d61c4dd6deb80477cb5977b79b00614b20b409 (patch) | |
tree | 649e913ff67706ee2c41a7cb3102c135424b8f35 /src/core/iomgr/tcp_server_posix.c | |
parent | 608254011d441b1e234fc5d6aa528cedccaddda3 (diff) |
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 <ctiller@google.com>
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=82178515
Diffstat (limited to 'src/core/iomgr/tcp_server_posix.c')
-rw-r--r-- | src/core/iomgr/tcp_server_posix.c | 9 |
1 files changed, 8 insertions, 1 deletions
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); |