From 9391ed529c5b20dd8ad1114e28ca1e6dcb1de190 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 19 May 2016 18:37:31 +0200 Subject: export function to free commit coin data --- src/exchangedb/plugin_exchangedb_postgres.c | 19 +++++++++------ src/exchangedb/test_exchangedb.c | 38 ++++++++--------------------- src/include/taler_exchangedb_plugin.h | 12 +++++++++ 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c index c5965ae1f..eee31bdc0 100644 --- a/src/exchangedb/plugin_exchangedb_postgres.c +++ b/src/exchangedb/plugin_exchangedb_postgres.c @@ -3107,12 +3107,14 @@ postgres_insert_refresh_commit_coins (void *cls, * We allocated some @a commit_coin information, but now need * to abort. Free allocated memory. * - * @param commit_coins data to free (but not the array itself) + * @param cls unused * @param commit_coins_len length of @a commit_coins array + * @param commit_coins data to free (but not the array itself) */ static void -free_cc_result (struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins, - unsigned int commit_coins_len) +postgres_free_refresh_commit_coins (void *cls, + unsigned int commit_coins_len, + struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins) { unsigned int i; @@ -3174,13 +3176,13 @@ postgres_get_refresh_commit_coins (void *cls, { BREAK_DB_ERR (result); PQclear (result); - free_cc_result (commit_coins, i); + postgres_free_refresh_commit_coins (cls, i, commit_coins); return GNUNET_SYSERR; } if (0 == PQntuples (result)) { PQclear (result); - free_cc_result (commit_coins, i); + postgres_free_refresh_commit_coins (cls, i, commit_coins); return GNUNET_NO; } { @@ -3198,7 +3200,7 @@ postgres_get_refresh_commit_coins (void *cls, GNUNET_PQ_extract_result (result, rs, 0)) { PQclear (result); - free_cc_result (commit_coins, i); + postgres_free_refresh_commit_coins (cls, i, commit_coins); return GNUNET_SYSERR; } } @@ -3207,7 +3209,7 @@ postgres_get_refresh_commit_coins (void *cls, { GNUNET_free (c_buf); GNUNET_free (rl_buf); - free_cc_result (commit_coins, i); + postgres_free_refresh_commit_coins (cls, i, commit_coins); return GNUNET_SYSERR; } rl = TALER_refresh_link_encrypted_decode (rl_buf, @@ -4315,7 +4317,7 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) } else { - if (GNUNET_OK == + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "exchangedb-postgres", "db_conn_str", @@ -4358,6 +4360,7 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) plugin->get_refresh_order = &postgres_get_refresh_order; plugin->insert_refresh_commit_coins = &postgres_insert_refresh_commit_coins; plugin->get_refresh_commit_coins = &postgres_get_refresh_commit_coins; + plugin->free_refresh_commit_coins = &postgres_free_refresh_commit_coins; plugin->insert_refresh_commit_link = &postgres_insert_refresh_commit_link; plugin->get_refresh_commit_link = &postgres_get_refresh_commit_link; plugin->get_melt_commitment = &postgres_get_melt_commitment; diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c index e15d657e5..a5530e3cc 100644 --- a/src/exchangedb/test_exchangedb.c +++ b/src/exchangedb/test_exchangedb.c @@ -293,31 +293,6 @@ static struct TALER_Amount fee_refund; static struct TALER_Amount amount_with_fee; -/** - * Free memory associated with @a commit_coins. - * - * @param commit_coins memory to release - * @param size size of the @a commit_coins array - */ -static void -free_refresh_commit_coins_array (struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins, - unsigned int size) -{ - unsigned int cnt; - struct TALER_EXCHANGEDB_RefreshCommitCoin *ccoin; - struct TALER_RefreshLinkEncrypted *rlink; - - for (cnt = 0; cnt < size; cnt++) - { - ccoin = &commit_coins[cnt]; - GNUNET_free_non_null (ccoin->coin_ev); - rlink = (struct TALER_RefreshLinkEncrypted *) ccoin->refresh_link; - GNUNET_free_non_null (rlink); - } - GNUNET_free (commit_coins); -} - - /** * Compare two coin encrypted refresh links. * @@ -474,7 +449,12 @@ test_refresh_commit_coins (struct TALER_EXCHANGEDB_Session *session, drop: if (NULL != ret_commit_coins) - free_refresh_commit_coins_array (ret_commit_coins, MELT_NEW_COINS); + { + plugin->free_refresh_commit_coins (plugin->cls, + MELT_NEW_COINS, + ret_commit_coins); + GNUNET_free (ret_commit_coins); + } return ret; } @@ -811,8 +791,10 @@ test_melting (struct TALER_EXCHANGEDB_Session *session) for (cnt=0;cntfree_refresh_commit_coins (plugin->cls, + MELT_NEW_COINS, + commit_coins[cnt]); + GNUNET_free (commit_coins[cnt]); commit_coins[cnt] = NULL; } if (NULL != dkp) diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h index 4c6f546f9..56e226071 100644 --- a/src/include/taler_exchangedb_plugin.h +++ b/src/include/taler_exchangedb_plugin.h @@ -1189,6 +1189,18 @@ struct TALER_EXCHANGEDB_Plugin uint16_t num_coins, struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins); + /** + * Free refresh @a commit_coins data obtained via @e get_refresh_commit_coins. + * + * @param cls the @e cls of this struct with the plugin-specific state + * @param num_coins size of the @a commit_coins array + * @param commit_coins array of coin commitments to free + */ + void + (*free_refresh_commit_coins) (void *cls, + unsigned int num_coins, + struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins); + /** * Store the commitment to the given (encrypted) refresh link data -- cgit v1.2.3