-fix crash if there is a conflict on inserting into the purse_decision table
This commit is contained in:
parent
07b4b1aa3f
commit
461dc8e36c
@ -1 +1 @@
|
|||||||
Subproject commit a4a6b9ba4b2634c56194d53e36344686d7052cef
|
Subproject commit 212ee0a78adc43cb5c04d6ea96ccc2fe74fed62b
|
@ -185,13 +185,14 @@ deposit_transaction (void *cls,
|
|||||||
{
|
{
|
||||||
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
|
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
|
||||||
return qs;
|
return qs;
|
||||||
|
GNUNET_break (0 != qs);
|
||||||
TALER_LOG_WARNING (
|
TALER_LOG_WARNING (
|
||||||
"Failed to store purse deposit information in database\n");
|
"Failed to store purse deposit information in database\n");
|
||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_GENERIC_DB_STORE_FAILED,
|
TALER_EC_GENERIC_DB_STORE_FAILED,
|
||||||
"do purse deposit");
|
"do purse deposit");
|
||||||
return qs;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
if (! balance_ok)
|
if (! balance_ok)
|
||||||
{
|
{
|
||||||
@ -203,6 +204,9 @@ deposit_transaction (void *cls,
|
|||||||
&coin->cpi.coin_pub);
|
&coin->cpi.coin_pub);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
|
// FIXME: there is also a 'conflict' case where the purse was already
|
||||||
|
// decided (fully paid up OR expired), we should probably distinguish
|
||||||
|
// those better!
|
||||||
if (conflict)
|
if (conflict)
|
||||||
{
|
{
|
||||||
struct TALER_Amount amount;
|
struct TALER_Amount amount;
|
||||||
|
@ -1557,7 +1557,14 @@ INSERT INTO purse_decision
|
|||||||
VALUES
|
VALUES
|
||||||
(in_purse_pub
|
(in_purse_pub
|
||||||
,in_now
|
,in_now
|
||||||
,FALSE);
|
,FALSE)
|
||||||
|
ON CONFLICT DO NOTHING;
|
||||||
|
|
||||||
|
IF NOT FOUND
|
||||||
|
THEN
|
||||||
|
out_conflict=TRUE;
|
||||||
|
RETURN;
|
||||||
|
END IF;
|
||||||
|
|
||||||
IF (my_in_reserve_quota)
|
IF (my_in_reserve_quota)
|
||||||
THEN
|
THEN
|
||||||
|
@ -1171,9 +1171,8 @@ TALER_EXCHANGE_batch_deposit (
|
|||||||
* @param deposit the batch deposit permission request handle
|
* @param deposit the batch deposit permission request handle
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
TALER_EXCHANGE_batch_deposit_force_dc (struct
|
TALER_EXCHANGE_batch_deposit_force_dc (
|
||||||
TALER_EXCHANGE_BatchDepositHandle *
|
struct TALER_EXCHANGE_BatchDepositHandle *deposit);
|
||||||
deposit);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1183,8 +1182,8 @@ TALER_EXCHANGE_batch_deposit_force_dc (struct
|
|||||||
* @param deposit the deposit permission request handle
|
* @param deposit the deposit permission request handle
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
TALER_EXCHANGE_batch_deposit_cancel (struct
|
TALER_EXCHANGE_batch_deposit_cancel (
|
||||||
TALER_EXCHANGE_BatchDepositHandle *deposit);
|
struct TALER_EXCHANGE_BatchDepositHandle *deposit);
|
||||||
|
|
||||||
|
|
||||||
/* ********************* /coins/$COIN_PUB/refund *********************** */
|
/* ********************* /coins/$COIN_PUB/refund *********************** */
|
||||||
@ -1241,10 +1240,10 @@ typedef void
|
|||||||
* signatures fail to verify). In this case, the callback is not called.
|
* signatures fail to verify). In this case, the callback is not called.
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_RefundHandle *
|
struct TALER_EXCHANGE_RefundHandle *
|
||||||
TALER_EXCHANGE_refund (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_refund (
|
||||||
|
struct TALER_EXCHANGE_Handle *exchange,
|
||||||
const struct TALER_Amount *amount,
|
const struct TALER_Amount *amount,
|
||||||
const struct
|
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||||
TALER_PrivateContractHashP *h_contract_terms,
|
|
||||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||||
uint64_t rtransaction_id,
|
uint64_t rtransaction_id,
|
||||||
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
||||||
|
Loading…
Reference in New Issue
Block a user