Merge pull request #1 from apache/dont-create-new-tx-object-on-retries

Do not create a new transaction object during retries
diff --git a/src/erlfdb.erl b/src/erlfdb.erl
index d4e7d8a..2f6460e 100644
--- a/src/erlfdb.erl
+++ b/src/erlfdb.erl
@@ -156,7 +156,8 @@
 
 transactional(?IS_DB = Db, UserFun) when is_function(UserFun, 1) ->
     clear_erlfdb_error(),
-    do_transaction(Db, UserFun);
+    Tx = create_transaction(Db),
+    do_transaction(Tx, UserFun);
 
 transactional(?IS_TX = Tx, UserFun) when is_function(UserFun, 1) ->
     UserFun(Tx);
@@ -641,8 +642,7 @@
     put(?ERLFDB_ERROR, undefined).
 
 
-do_transaction(Db, UserFun) ->
-    Tx = create_transaction(Db),
+do_transaction(?IS_TX = Tx, UserFun) ->
     try
         Ret = UserFun(Tx),
         wait(commit(Tx)),
@@ -650,7 +650,7 @@
     catch error:{erlfdb_error, Code} ->
         put(?ERLFDB_ERROR, Code),
         wait(on_error(Tx, Code)),
-        do_transaction(Db, UserFun)
+        do_transaction(Tx, UserFun)
     end.