diff options
author | 2016-11-11 15:03:39 -0800 | |
---|---|---|
committer | 2016-11-11 15:03:39 -0800 | |
commit | 27588bbfb9fb38c2ac7a3eb98fb1de459a014af6 (patch) | |
tree | 2d0b2532b7679b15d52d0ac32176a2f5e93dac03 /src/core/ext/transport/chttp2/server | |
parent | aaefa958d796e8f9ec1fe48df61ca0fd9425be48 (diff) |
Change handshake manager to invoke callbacks via an exec_ctx.
Diffstat (limited to 'src/core/ext/transport/chttp2/server')
-rw-r--r-- | src/core/ext/transport/chttp2/server/insecure/server_chttp2.c | 16 | ||||
-rw-r--r-- | src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c | 20 |
2 files changed, 19 insertions, 17 deletions
diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c index c18d618f96..b7bf49beb9 100644 --- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c @@ -54,18 +54,17 @@ typedef struct server_connect_state { grpc_handshake_manager *handshake_mgr; } server_connect_state; -static void on_handshake_done(grpc_exec_ctx *exec_ctx, grpc_endpoint *endpoint, - grpc_channel_args *args, - grpc_slice_buffer *read_buffer, void *user_data, +static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { - server_connect_state *state = user_data; + grpc_handshaker_args *args = arg; + server_connect_state *state = args->user_data; if (error != GRPC_ERROR_NONE) { const char *error_str = grpc_error_string(error); gpr_log(GPR_ERROR, "Handshaking failed: %s", error_str); grpc_error_free_string(error_str); GRPC_ERROR_UNREF(error); grpc_handshake_manager_shutdown(exec_ctx, state->handshake_mgr); - gpr_free(read_buffer); + gpr_free(args->read_buffer); } else { // Beware that the call to grpc_create_chttp2_transport() has to happen // before grpc_tcp_server_destroy(). This is fine here, but similar code @@ -73,14 +72,15 @@ static void on_handshake_done(grpc_exec_ctx *exec_ctx, grpc_endpoint *endpoint, // grpc_tcp_server_start() (as in server_secure_chttp2.c) needs to add // synchronization to avoid this case. grpc_transport *transport = - grpc_create_chttp2_transport(exec_ctx, args, endpoint, 0); + grpc_create_chttp2_transport(exec_ctx, args->args, args->endpoint, 0); grpc_server_setup_transport(exec_ctx, state->server, transport, state->accepting_pollset, grpc_server_get_channel_args(state->server)); - grpc_chttp2_transport_start_reading(exec_ctx, transport, read_buffer); + grpc_chttp2_transport_start_reading(exec_ctx, transport, args->read_buffer); } // Clean up. - grpc_channel_args_destroy(args); + grpc_channel_args_destroy(args->args); + gpr_free(args); grpc_handshake_manager_destroy(exec_ctx, state->handshake_mgr); gpr_free(state); } diff --git a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c index 942638ad7f..0002a5cb30 100644 --- a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +++ b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c @@ -115,18 +115,19 @@ static void on_secure_handshake_done(grpc_exec_ctx *exec_ctx, void *statep, gpr_free(connection_state); } -static void on_handshake_done(grpc_exec_ctx *exec_ctx, grpc_endpoint *endpoint, - grpc_channel_args *args, - grpc_slice_buffer *read_buffer, void *user_data, +static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { - server_secure_connect *connection_state = user_data; + grpc_handshaker_args* args = arg; + server_secure_connect *connection_state = args->user_data; if (error != GRPC_ERROR_NONE) { const char *error_str = grpc_error_string(error); gpr_log(GPR_ERROR, "Handshaking failed: %s", error_str); grpc_error_free_string(error_str); - GRPC_ERROR_UNREF(error); - grpc_channel_args_destroy(args); - gpr_free(read_buffer); +// FIXME: remove? +// GRPC_ERROR_UNREF(error); + grpc_channel_args_destroy(args->args); + gpr_free(args->read_buffer); + gpr_free(args); grpc_handshake_manager_shutdown(exec_ctx, connection_state->handshake_mgr); grpc_handshake_manager_destroy(exec_ctx, connection_state->handshake_mgr); grpc_tcp_server_unref(exec_ctx, connection_state->server_state->tcp); @@ -138,11 +139,12 @@ static void on_handshake_done(grpc_exec_ctx *exec_ctx, grpc_endpoint *endpoint, // TODO(roth, jboeuf): Convert security connector handshaking to use new // handshake API, and then move the code from on_secure_handshake_done() // into this function. - connection_state->args = args; + connection_state->args = args->args; grpc_server_security_connector_do_handshake( exec_ctx, connection_state->server_state->sc, connection_state->acceptor, - endpoint, read_buffer, connection_state->deadline, + args->endpoint, args->read_buffer, connection_state->deadline, on_secure_handshake_done, connection_state); + gpr_free(args); } static void on_accept(grpc_exec_ctx *exec_ctx, void *statep, grpc_endpoint *tcp, |