diff --git a/src/db/transaction.ts b/src/db/transaction.ts index edaf4cd..76db80b 100644 --- a/src/db/transaction.ts +++ b/src/db/transaction.ts @@ -91,6 +91,7 @@ export async function transaction( if (txnSeq >= Number.MAX_SAFE_INTEGER - 1) txnSeq = 0; // wrap around + let released = false; const txnId = txnSeq++, clientIsOurs = typeofQueryable(txnClientOrQueryable) === 'pool', @@ -140,9 +141,15 @@ export async function transaction( } } + } catch (err) { + if (clientIsOurs && !released) { + txnClient.release(err); + released = true; + } + throw err; } finally { delete txnClient._zapatos; - if (clientIsOurs) txnClient.release(); + if (clientIsOurs && !released) txnClient.release(); } }