Dispose of newly created transactions if transfer() fails.

This commit is contained in:
A.J. Beamon 2017-11-17 09:47:17 -08:00
parent 5b5850e097
commit 0981e0dcdd
2 changed files with 28 additions and 8 deletions

View File

@ -527,10 +527,20 @@ class FDBTransaction extends DefaultDisposableImpl implements Disposable, Transa
// Must hold pointerReadLock when calling
private FDBTransaction transfer() {
FDBTransaction tr = new FDBTransaction(getPtr(), database, executor);
tr.options().setUsedDuringCommitProtectionDisable();
transactionOwner = false;
return tr;
FDBTransaction tr = null;
try {
tr = new FDBTransaction(getPtr(), database, executor);
tr.options().setUsedDuringCommitProtectionDisable();
transactionOwner = false;
return tr;
}
catch(RuntimeException err) {
if(tr != null) {
tr.dispose();
}
throw err;
}
}
@Override

View File

@ -579,10 +579,20 @@ class FDBTransaction extends DefaultDisposableImpl implements Disposable, Transa
// Must hold pointerReadLock when calling
private FDBTransaction transfer() {
FDBTransaction tr = new FDBTransaction(getPtr(), database, executor);
tr.options().setUsedDuringCommitProtectionDisable();
transactionOwner = false;
return tr;
FDBTransaction tr = null;
try {
tr = new FDBTransaction(getPtr(), database, executor);
tr.options().setUsedDuringCommitProtectionDisable();
transactionOwner = false;
return tr;
}
catch(RuntimeException err) {
if(tr != null) {
tr.dispose();
}
throw err;
}
}
@Override