diff options
author | yang-g <yangg@google.com> | 2015-11-21 12:33:22 -0800 |
---|---|---|
committer | yang-g <yangg@google.com> | 2015-11-21 12:33:22 -0800 |
commit | f8843fb58c44f34654353d9a43a1266ae091725a (patch) | |
tree | bdd9576f7c11710faa54cd3ff90d1d6d414f3bbd /test/core/util/test_tcp_server.c | |
parent | 3ff9727a373e5e8819b9db288df99f8d7f68270e (diff) |
fix build and windows test
Diffstat (limited to 'test/core/util/test_tcp_server.c')
-rw-r--r-- | test/core/util/test_tcp_server.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/test/core/util/test_tcp_server.c b/test/core/util/test_tcp_server.c index e78d830058..c700d3637f 100644 --- a/test/core/util/test_tcp_server.c +++ b/test/core/util/test_tcp_server.c @@ -49,6 +49,7 @@ void test_tcp_server_init(test_tcp_server *server, grpc_tcp_server_cb on_connect, void *user_data) { grpc_init(); server->tcp_server = NULL; + server->shutdown = 0; grpc_pollset_init(&server->pollset); server->pollsets[0] = &server->pollset; server->on_connect = on_connect; @@ -90,16 +91,29 @@ void test_tcp_server_poll(test_tcp_server *server, int seconds) { grpc_exec_ctx_finish(&exec_ctx); } -static void do_nothing(grpc_exec_ctx *exec_ctx, void *ignored, int success) {} +static void on_server_destroyed(grpc_exec_ctx *exec_ctx, void *data, + int success) { + test_tcp_server *server = data; + server->shutdown = 1; +} + +static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, int success) {} void test_tcp_server_destroy(test_tcp_server *server) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_closure do_nothing_closure[2]; - grpc_closure_init(&do_nothing_closure[0], do_nothing, NULL); - grpc_closure_init(&do_nothing_closure[1], do_nothing, NULL); - grpc_tcp_server_destroy(&exec_ctx, server->tcp_server, - &do_nothing_closure[0]); - grpc_pollset_shutdown(&exec_ctx, &server->pollset, &do_nothing_closure[1]); + gpr_timespec shutdown_deadline; + grpc_closure server_shutdown_cb; + grpc_closure do_nothing_cb; + grpc_closure_init(&server_shutdown_cb, on_server_destroyed, server); + grpc_closure_init(&do_nothing_cb, do_nothing, NULL); + grpc_tcp_server_destroy(&exec_ctx, server->tcp_server, &server_shutdown_cb); + shutdown_deadline = gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), + gpr_time_from_seconds(5, GPR_TIMESPAN)); + while (!server->shutdown && + gpr_time_cmp(gpr_now(GPR_CLOCK_MONOTONIC), shutdown_deadline) < 0) { + test_tcp_server_poll(server, 1); + } + grpc_pollset_shutdown(&exec_ctx, &server->pollset, &do_nothing_cb); grpc_exec_ctx_finish(&exec_ctx); grpc_pollset_destroy(&server->pollset); grpc_shutdown(); |