diff options
author | Christian Grothoff <christian@grothoff.org> | 2021-12-08 16:11:27 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2021-12-08 16:11:52 +0100 |
commit | b64f718037aa318e83424fa6e2e83021908ff1dc (patch) | |
tree | f170eb4fb8152db0b724d0ed62b7cae80e7b6da5 /src | |
parent | 54177c6e1ddc63cb3411e42ee56fbba143c71614 (diff) |
more aggressive rollback on failures
Diffstat (limited to 'src')
-rw-r--r-- | src/exchange/taler-exchange-httpd_db.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/exchange/taler-exchange-httpd_db.c b/src/exchange/taler-exchange-httpd_db.c index da495517a..c091f994d 100644 --- a/src/exchange/taler-exchange-httpd_db.c +++ b/src/exchange/taler-exchange-httpd_db.c @@ -163,15 +163,20 @@ TEH_DB_run_transaction (struct MHD_Connection *connection, if (GNUNET_DB_STATUS_HARD_ERROR == qs) return GNUNET_SYSERR; if (0 <= qs) - qs = TEH_plugin->commit (TEH_plugin->cls); - if (GNUNET_DB_STATUS_HARD_ERROR == qs) { - if (NULL != mhd_ret) - *mhd_ret = TALER_MHD_reply_with_error (connection, - MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_GENERIC_DB_COMMIT_FAILED, - NULL); - return GNUNET_SYSERR; + qs = TEH_plugin->commit (TEH_plugin->cls); + if (GNUNET_DB_STATUS_HARD_ERROR == qs) + { + TEH_plugin->rollback (TEH_plugin->cls); + if (NULL != mhd_ret) + *mhd_ret = TALER_MHD_reply_with_error (connection, + MHD_HTTP_INTERNAL_SERVER_ERROR, + TALER_EC_GENERIC_DB_COMMIT_FAILED, + NULL); + return GNUNET_SYSERR; + } + if (0 > qs) + TEH_plugin->rollback (TEH_plugin->cls); } /* make sure callback did not violate invariants! */ GNUNET_assert ( (NULL == mhd_ret) || |