|
|
|
@ -139,20 +139,22 @@ void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error* error) { |
|
|
|
|
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("connector shutdown"); |
|
|
|
|
// We were shut down after handshaking completed successfully, so
|
|
|
|
|
// destroy the endpoint here.
|
|
|
|
|
// TODO(ctiller): It is currently necessary to shutdown endpoints
|
|
|
|
|
// before destroying them, even if we know that there are no
|
|
|
|
|
// pending read/write callbacks. This should be fixed, at which
|
|
|
|
|
// point this can be removed.
|
|
|
|
|
grpc_endpoint_shutdown(args->endpoint, GRPC_ERROR_REF(error)); |
|
|
|
|
grpc_endpoint_destroy(args->endpoint); |
|
|
|
|
grpc_channel_args_destroy(args->args); |
|
|
|
|
grpc_slice_buffer_destroy_internal(args->read_buffer); |
|
|
|
|
gpr_free(args->read_buffer); |
|
|
|
|
if (args->endpoint != nullptr) { |
|
|
|
|
// TODO(ctiller): It is currently necessary to shutdown endpoints
|
|
|
|
|
// before destroying them, even if we know that there are no
|
|
|
|
|
// pending read/write callbacks. This should be fixed, at which
|
|
|
|
|
// point this can be removed.
|
|
|
|
|
grpc_endpoint_shutdown(args->endpoint, GRPC_ERROR_REF(error)); |
|
|
|
|
grpc_endpoint_destroy(args->endpoint); |
|
|
|
|
grpc_channel_args_destroy(args->args); |
|
|
|
|
grpc_slice_buffer_destroy_internal(args->read_buffer); |
|
|
|
|
gpr_free(args->read_buffer); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
error = GRPC_ERROR_REF(error); |
|
|
|
|
} |
|
|
|
|
self->result_->Reset(); |
|
|
|
|
} else { |
|
|
|
|
} else if (args->endpoint != nullptr) { |
|
|
|
|
grpc_endpoint_delete_from_pollset_set(args->endpoint, |
|
|
|
|
self->args_.interested_parties); |
|
|
|
|
self->result_->transport = |
|
|
|
@ -187,6 +189,11 @@ void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error* error) { |
|
|
|
|
grpc_chttp2_transport_start_reading(self->result_->transport, |
|
|
|
|
args->read_buffer, nullptr); |
|
|
|
|
self->result_->channel_args = args->args; |
|
|
|
|
} else { |
|
|
|
|
// If the handshaking succeeded but there is no endpoint, then the
|
|
|
|
|
// handshaker may have handed off the connection to some external
|
|
|
|
|
// code. Just verify that exit_early flag is set.
|
|
|
|
|
GPR_DEBUG_ASSERT(args->exit_early); |
|
|
|
|
} |
|
|
|
|
grpc_closure* notify = self->notify_; |
|
|
|
|
self->notify_ = nullptr; |
|
|
|
|