diff options
author | Mark D. Roth <roth@google.com> | 2016-07-22 09:02:15 -0700 |
---|---|---|
committer | Mark D. Roth <roth@google.com> | 2016-07-22 09:02:15 -0700 |
commit | a228e5f23104ef370e1434a848b61a3574e07e55 (patch) | |
tree | eef7d494267561862fdaa8a53436c75a809fffae /src/core/lib/channel/handshaker.c | |
parent | b16b1f29c3aa7238814cd70a4abcee0f35dc6b9f (diff) |
Add grpc_error parameter to handshaker callback.
Diffstat (limited to 'src/core/lib/channel/handshaker.c')
-rw-r--r-- | src/core/lib/channel/handshaker.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/core/lib/channel/handshaker.c b/src/core/lib/channel/handshaker.c index b3ee0ed6f9..f9ecaf8856 100644 --- a/src/core/lib/channel/handshaker.c +++ b/src/core/lib/channel/handshaker.c @@ -130,8 +130,6 @@ void grpc_handshake_manager_destroy(grpc_exec_ctx* exec_ctx, void grpc_handshake_manager_shutdown(grpc_exec_ctx* exec_ctx, grpc_handshake_manager* mgr) { - // FIXME: maybe check which handshaker is currently in progress, and - // only shut down that one? for (size_t i = 0; i < mgr->count; ++i) { grpc_handshaker_shutdown(exec_ctx, mgr->handshakers[i]); } @@ -145,10 +143,18 @@ void grpc_handshake_manager_shutdown(grpc_exec_ctx* exec_ctx, // handshakers together. static void call_next_handshaker(grpc_exec_ctx* exec_ctx, grpc_endpoint* endpoint, - grpc_channel_args* args, void* user_data) { + grpc_channel_args* args, void* user_data, + grpc_error* error) { grpc_handshake_manager* mgr = user_data; GPR_ASSERT(mgr->state != NULL); GPR_ASSERT(mgr->state->index < mgr->count); + // If we got an error, skip all remaining handshakers and invoke the + // caller-supplied callback immediately. + if (error != GRPC_ERROR_NONE) { + mgr->state->final_cb(exec_ctx, endpoint, args, mgr->state->final_user_data, + error); + return; + } grpc_handshaker_done_cb cb = call_next_handshaker; // If this is the last handshaker, use the caller-supplied callback // and user_data instead of chaining back to this function again. @@ -177,7 +183,7 @@ void grpc_handshake_manager_do_handshake( if (mgr->count == 0) { // No handshakers registered, so we just immediately call the done // callback with the passed-in endpoint. - cb(exec_ctx, endpoint, args_copy, user_data); + cb(exec_ctx, endpoint, args_copy, user_data, GRPC_ERROR_NONE); } else { GPR_ASSERT(mgr->state == NULL); mgr->state = gpr_malloc(sizeof(struct grpc_handshaker_state)); @@ -186,6 +192,6 @@ void grpc_handshake_manager_do_handshake( mgr->state->acceptor = acceptor; mgr->state->final_cb = cb; mgr->state->final_user_data = user_data; - call_next_handshaker(exec_ctx, endpoint, args_copy, mgr); + call_next_handshaker(exec_ctx, endpoint, args_copy, mgr, GRPC_ERROR_NONE); } } |