diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManagerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManagerImpl.java index b1d37f3e4cd..bbf34ab5c8f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManagerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionManagerImpl.java @@ -80,6 +80,13 @@ public void commit() { } catch (SpannerException e2) { txnState = TransactionState.COMMIT_FAILED; throw e2; + } finally { + // At this point, if the TransactionState is not ABORTED, then the transaction has reached an + // end state. + // We can safely call close() to release resources. + if (getState() != TransactionState.ABORTED) { + close(); + } } } @@ -92,6 +99,9 @@ public void rollback() { txn.rollback(); } finally { txnState = TransactionState.ROLLED_BACK; + // At this point, the TransactionState is ROLLED_BACK which is an end state. + // We can safely call close() to release resources. + close(); } }