aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/iomgr/tcp_server_posix.c
diff options
context:
space:
mode:
authorGravatar ctiller <ctiller@google.com>2014-12-15 14:52:08 -0800
committerGravatar Nicolas Noble <nnoble@google.com>2014-12-15 15:39:03 -0800
commitc6d61c4dd6deb80477cb5977b79b00614b20b409 (patch)
tree649e913ff67706ee2c41a7cb3102c135424b8f35 /src/core/iomgr/tcp_server_posix.c
parent608254011d441b1e234fc5d6aa528cedccaddda3 (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.c9
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);