|
@@ -158,18 +158,24 @@ static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg,
|
|
grpc_error *error) {
|
|
grpc_error *error) {
|
|
grpc_handshaker_args *args = arg;
|
|
grpc_handshaker_args *args = arg;
|
|
on_done_closure *c = args->user_data;
|
|
on_done_closure *c = args->user_data;
|
|
|
|
+ grpc_channel_args_destroy(args->args);
|
|
|
|
+ grpc_slice_buffer_destroy(args->read_buffer);
|
|
|
|
+ gpr_free(args->read_buffer);
|
|
if (error != GRPC_ERROR_NONE) {
|
|
if (error != GRPC_ERROR_NONE) {
|
|
const char* msg = grpc_error_string(error);
|
|
const char* msg = grpc_error_string(error);
|
|
gpr_log(GPR_ERROR, "Secure transport setup failed: %s", msg);
|
|
gpr_log(GPR_ERROR, "Secure transport setup failed: %s", msg);
|
|
grpc_error_free_string(msg);
|
|
grpc_error_free_string(msg);
|
|
c->func(exec_ctx, c->arg, NULL);
|
|
c->func(exec_ctx, c->arg, NULL);
|
|
|
|
+ // 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(exec_ctx, args->endpoint);
|
|
|
|
+ grpc_endpoint_destroy(exec_ctx, args->endpoint);
|
|
} else {
|
|
} else {
|
|
c->func(exec_ctx, c->arg, args->endpoint);
|
|
c->func(exec_ctx, c->arg, args->endpoint);
|
|
}
|
|
}
|
|
gpr_free(c);
|
|
gpr_free(c);
|
|
- grpc_channel_args_destroy(args->args);
|
|
|
|
- gpr_free(args->read_buffer);
|
|
|
|
- gpr_free(args);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static void ssl_handshake(grpc_exec_ctx *exec_ctx, void *arg,
|
|
static void ssl_handshake(grpc_exec_ctx *exec_ctx, void *arg,
|