message: When executing a TRTEngineOp fails, release the output tensors.
  Otherwise ExecuteTrtEngine() may check-fail if any outputs are already allocated.
diff: @@ -505,6 +505,11 @@ void TRTEngineOp::ComputeAsync(OpKernelContext* ctx,
  if (retry) {
  LOG(WARNING) << "Failed to execute engine, "
  << "retrying with native segment for " << name();
  + // Release any outputs that are allocated, ExecuteNativeSegment will
  + // re-allocate them and fail if they are currently allocated.
  + for (int i = 0; i < ctx->num_outputs(); i++) {
  + ctx->release_output(i);
  + }
  ExecuteNativeSegment(ctx, helper);
  return;
  }
  @@ -592,9 +597,7 @@ bool TRTEngineOp::ExecuteTrtEngine(OpKernelContext* ctx,
  if (!status.ok()) {
  LOG(ERROR) << "Allocating output failed with " << status;
  ctx->SetStatus(status);
  - // Do not retry since we cannot allocate the same output twice.
  - // TODO(aaroey): ideally we should retry, fix this.
  - return !kRetry;
  + return kRetry;
  }
  auto dtype = cuda_engine->getBindingDataType(binding_index);
  switch (dtype) {
  