From 7749a683ba602cf13ed160c6ed63d668adbf4b1c Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 20 Nov 2017 21:55:24 +0100 Subject: fix issue in wire auditor's history processing --- src/auditor/taler-wire-auditor.c | 45 ++++++++++++++++++++++++++-------------- src/wire/plugin_wire_test.c | 3 +-- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/auditor/taler-wire-auditor.c b/src/auditor/taler-wire-auditor.c index 9f16794d2..1b514a0ef 100644 --- a/src/auditor/taler-wire-auditor.c +++ b/src/auditor/taler-wire-auditor.c @@ -874,7 +874,7 @@ history_debit_cb (void *cls, "wire_offset_hash", GNUNET_JSON_from_data_auto (&rowh), "diagnostic", diagnostic)); GNUNET_free (diagnostic); - return GNUNET_SYSERR; + return GNUNET_OK; } roi = GNUNET_new (struct ReserveOutInfo); GNUNET_CRYPTO_hash (&details->wtid, @@ -908,14 +908,14 @@ history_debit_cb (void *cls, "wire_offset_hash", GNUNET_JSON_from_data_auto (&rowh), "diagnostic", diagnostic)); GNUNET_free (diagnostic); - return GNUNET_SYSERR; + return GNUNET_OK; } return GNUNET_OK; } /** - * Main functin for processing 'reserves_out' data. + * Main function for processing 'reserves_out' data. * We start by going over the DEBIT transactions this * time, and then verify that all of them are justified * by 'reserves_out'. @@ -1043,6 +1043,27 @@ complain_in_not_found (void *cls, } +/** + * Conclude the credit history check by logging entries that + * were not found and freeing resources. Then move on to + * processing debits. + */ +static void +conclude_credit_history () +{ + GNUNET_CONTAINER_multihashmap_iterate (in_map, + &complain_in_not_found, + NULL); + /* clean up before 2nd phase */ + GNUNET_CONTAINER_multihashmap_iterate (in_map, + &free_rii, + NULL); + GNUNET_CONTAINER_multihashmap_destroy (in_map); + in_map = NULL; + process_debits (); +} + + /** * This function is called for all transactions that * are credited to the exchange's account (incoming @@ -1069,17 +1090,8 @@ history_credit_cb (void *cls, { /* end of operation */ hh = NULL; - GNUNET_CONTAINER_multihashmap_iterate (in_map, - &complain_in_not_found, - NULL); - /* clean up before 2nd phase */ - GNUNET_CONTAINER_multihashmap_iterate (in_map, - &free_rii, - NULL); - GNUNET_CONTAINER_multihashmap_destroy (in_map); - in_map = NULL; - process_debits (); - return GNUNET_SYSERR; + conclude_credit_history (); + return GNUNET_OK; } GNUNET_CRYPTO_hash (row_off, row_off_size, @@ -1091,7 +1103,9 @@ history_credit_cb (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Failed to find wire transfer at `%s' in exchange database. Audit ends at this point in time.\n", GNUNET_STRINGS_absolute_time_to_string (details->execution_date)); - return GNUNET_SYSERR; + hh = NULL; + conclude_credit_history (); + return GNUNET_SYSERR; /* not an error, just end of processing */ } /* Update offset */ @@ -1105,6 +1119,7 @@ history_credit_cb (void *cls, GNUNET_break (0); commit (GNUNET_DB_STATUS_HARD_ERROR); GNUNET_SCHEDULER_shutdown (); + hh = NULL; return GNUNET_SYSERR; } memcpy (in_wire_off, diff --git a/src/wire/plugin_wire_test.c b/src/wire/plugin_wire_test.c index e9d5ad085..1a7443b8a 100644 --- a/src/wire/plugin_wire_test.c +++ b/src/wire/plugin_wire_test.c @@ -872,7 +872,6 @@ bhist_cb (void *cls, NULL, 0, NULL); - whh->hh = NULL; GNUNET_free (whh); break; default: @@ -885,7 +884,6 @@ bhist_cb (void *cls, NULL, 0, NULL); - whh->hh = NULL; GNUNET_free (whh); break; } @@ -970,6 +968,7 @@ test_get_history (void *cls, GNUNET_free (whh); return NULL; } + return whh; } -- cgit v1.2.3