From 2021f75995732d760323eca1d1844bc29f0ac976 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 20 Mar 2020 12:34:26 +0100 Subject: fix logic to ensure that we do not call the callback after the iteration was aborted (caused big trouble in wirewatcher) --- src/bank-lib/bank_api_credit.c | 31 +++++++++++++++++++------------ src/bank-lib/bank_api_debit.c | 31 +++++++++++++++++++------------ 2 files changed, 38 insertions(+), 24 deletions(-) (limited to 'src/bank-lib') diff --git a/src/bank-lib/bank_api_credit.c b/src/bank-lib/bank_api_credit.c index 551831d24..4b6f40bbf 100644 --- a/src/bank-lib/bank_api_credit.c +++ b/src/bank-lib/bank_api_credit.c @@ -113,12 +113,18 @@ parse_account_history (struct TALER_BANK_CreditHistoryHandle *hh, GNUNET_break_op (0); return GNUNET_SYSERR; } - hh->hcb (hh->hcb_cls, - MHD_HTTP_OK, - TALER_EC_NONE, - row_id, - &td, - transaction); + if (GNUNET_OK != + hh->hcb (hh->hcb_cls, + MHD_HTTP_OK, + TALER_EC_NONE, + row_id, + &td, + transaction)) + { + hh->hcb = NULL; + GNUNET_JSON_parse_free (hist_spec); + return GNUNET_OK; + } GNUNET_JSON_parse_free (hist_spec); } return GNUNET_OK; @@ -195,12 +201,13 @@ handle_credit_history_finished (void *cls, response_code = 0; break; } - hh->hcb (hh->hcb_cls, - response_code, - ec, - 0LLU, - NULL, - j); + if (NULL != hh->hcb) + hh->hcb (hh->hcb_cls, + response_code, + ec, + 0LLU, + NULL, + j); TALER_BANK_credit_history_cancel (hh); } diff --git a/src/bank-lib/bank_api_debit.c b/src/bank-lib/bank_api_debit.c index 1418492e2..33ff20ef8 100644 --- a/src/bank-lib/bank_api_debit.c +++ b/src/bank-lib/bank_api_debit.c @@ -115,12 +115,18 @@ parse_account_history (struct TALER_BANK_DebitHistoryHandle *hh, GNUNET_break_op (0); return GNUNET_SYSERR; } - hh->hcb (hh->hcb_cls, - MHD_HTTP_OK, - TALER_EC_NONE, - row_id, - &td, - transaction); + if (GNUNET_OK != + hh->hcb (hh->hcb_cls, + MHD_HTTP_OK, + TALER_EC_NONE, + row_id, + &td, + transaction)) + { + hh->hcb = NULL; + GNUNET_JSON_parse_free (hist_spec); + return GNUNET_OK; + } GNUNET_JSON_parse_free (hist_spec); } return GNUNET_OK; @@ -199,12 +205,13 @@ handle_debit_history_finished (void *cls, response_code = 0; break; } - hh->hcb (hh->hcb_cls, - response_code, - ec, - 0LLU, - NULL, - j); + if (NULL != hh->hcb) + hh->hcb (hh->hcb_cls, + response_code, + ec, + 0LLU, + NULL, + j); TALER_BANK_debit_history_cancel (hh); } -- cgit v1.2.3