fixed memory leak
This commit is contained in:
parent
6ffe1d5dba
commit
6f02d4e355
@ -33,27 +33,30 @@ main (int argc, char ** argv)
|
|||||||
struct GNUNET_CONFIGURATION_Handle *config;
|
struct GNUNET_CONFIGURATION_Handle *config;
|
||||||
struct PERF_TALER_MINTDB_Cmd test[] =
|
struct PERF_TALER_MINTDB_Cmd test[] =
|
||||||
{
|
{
|
||||||
PERF_TALER_MINTDB_INIT_CMD_LOOP ("loop_db_init_deposit",100000),
|
PERF_TALER_MINTDB_INIT_CMD_LOOP ("loop_db_init_deposit",10),
|
||||||
PERF_TALER_MINTDB_INIT_CMD_START_TRANSACTION ("start_transaction_init"),
|
PERF_TALER_MINTDB_INIT_CMD_START_TRANSACTION ("start_transaction_init"),
|
||||||
PERF_TALER_MINTDB_INIT_CMD_INSERT_DEPOSIT ("init_deposit_insert"),
|
PERF_TALER_MINTDB_INIT_CMD_INSERT_DEPOSIT ("init_deposit_insert"),
|
||||||
PERF_TALER_MINTDB_INIT_CMD_COMMIT_TRANSACTION ("commit_transaction_init"),
|
PERF_TALER_MINTDB_INIT_CMD_COMMIT_TRANSACTION ("commit_transaction_init"),
|
||||||
PERF_TALER_MINTDB_INIT_CMD_END_LOOP ("endloop_init_deposit","loop_db_init_deposit"),
|
PERF_TALER_MINTDB_INIT_CMD_SAVE_ARRAY ("array_depo", "loop_db_init_deposit", "init_deposit_insert", 10, PERF_TALER_MINTDB_DEPOSIT),
|
||||||
|
PERF_TALER_MINTDB_INIT_CMD_END_LOOP ("endloop_init_deposit",
|
||||||
|
"loop_db_init_deposit"),
|
||||||
PERF_TALER_MINTDB_INIT_CMD_END("end")
|
PERF_TALER_MINTDB_INIT_CMD_END("end")
|
||||||
};
|
};
|
||||||
|
// Plugin init
|
||||||
config = GNUNET_CONFIGURATION_create();
|
config = GNUNET_CONFIGURATION_create();
|
||||||
GNUNET_CONFIGURATION_load(config, "./test-mint-db-postgres.conf");
|
GNUNET_CONFIGURATION_load(config, "./test-mint-db-postgres.conf");
|
||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
(plugin = TALER_MINTDB_plugin_load (config)));
|
(plugin = TALER_MINTDB_plugin_load (config)));
|
||||||
plugin->create_tables (plugin->cls, GNUNET_YES);
|
plugin->create_tables (plugin->cls, GNUNET_YES);
|
||||||
|
// Run command
|
||||||
PERF_TALER_MINTDB_interpret(plugin, test);
|
PERF_TALER_MINTDB_interpret(plugin, test);
|
||||||
|
// Drop tables
|
||||||
{
|
{
|
||||||
struct TALER_MINTDB_Session *session;
|
struct TALER_MINTDB_Session *session;
|
||||||
|
|
||||||
session = plugin->get_session (plugin->cls, GNUNET_YES);
|
session = plugin->get_session (plugin->cls, GNUNET_YES);
|
||||||
plugin->drop_temporary (plugin->cls, session);
|
plugin->drop_temporary (plugin->cls, session);
|
||||||
}
|
}
|
||||||
|
|
||||||
TALER_MINTDB_plugin_unload(plugin);
|
TALER_MINTDB_plugin_unload(plugin);
|
||||||
GNUNET_CONFIGURATION_destroy(config);
|
GNUNET_CONFIGURATION_destroy(config);
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#define CURRENCY "EUR"
|
#define CURRENCY "EUR"
|
||||||
|
#define PERF_TALER_MINTDB_RSA_SIZE 256
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -193,7 +194,9 @@ PERF_TALER_MINTDB_deposit_init ()
|
|||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
(eddsa_prvt = GNUNET_CRYPTO_eddsa_key_create ()));
|
(eddsa_prvt = GNUNET_CRYPTO_eddsa_key_create ()));
|
||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
(rsa_prv = GNUNET_CRYPTO_rsa_private_key_create (128)));
|
(rsa_prv = GNUNET_CRYPTO_rsa_private_key_create (PERF_TALER_MINTDB_RSA_SIZE)));
|
||||||
|
GNUNET_CRYPTO_eddsa_key_get_public (eddsa_prvt,
|
||||||
|
&coin.coin_pub.eddsa_pub);
|
||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
(coin.denom_pub.rsa_public_key =
|
(coin.denom_pub.rsa_public_key =
|
||||||
GNUNET_CRYPTO_rsa_private_key_get_public (rsa_prv)));
|
GNUNET_CRYPTO_rsa_private_key_get_public (rsa_prv)));
|
||||||
@ -202,8 +205,7 @@ PERF_TALER_MINTDB_deposit_init ()
|
|||||||
GNUNET_CRYPTO_rsa_sign (rsa_prv,
|
GNUNET_CRYPTO_rsa_sign (rsa_prv,
|
||||||
&coin.coin_pub.eddsa_pub,
|
&coin.coin_pub.eddsa_pub,
|
||||||
sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))));
|
sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))));
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (eddsa_prvt,
|
|
||||||
&coin.coin_pub.eddsa_pub);
|
|
||||||
GNUNET_CRYPTO_rsa_private_key_free (rsa_prv);
|
GNUNET_CRYPTO_rsa_private_key_free (rsa_prv);
|
||||||
GNUNET_free (eddsa_prvt);
|
GNUNET_free (eddsa_prvt);
|
||||||
}
|
}
|
||||||
@ -273,6 +275,7 @@ PERF_TALER_MINTDB_deposit_free (struct TALER_MINTDB_Deposit *deposit)
|
|||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
GNUNET_CRYPTO_rsa_public_key_free (deposit->coin.denom_pub.rsa_public_key);
|
GNUNET_CRYPTO_rsa_public_key_free (deposit->coin.denom_pub.rsa_public_key);
|
||||||
GNUNET_CRYPTO_rsa_signature_free (deposit->coin.denom_sig.rsa_signature);
|
GNUNET_CRYPTO_rsa_signature_free (deposit->coin.denom_sig.rsa_signature);
|
||||||
|
json_decref (deposit->wire);
|
||||||
GNUNET_free (deposit);
|
GNUNET_free (deposit);
|
||||||
|
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
@ -294,7 +297,7 @@ PERF_TALER_MINTDB_denomination_init ()
|
|||||||
(dki = GNUNET_new (struct TALER_MINTDB_DenominationKeyIssueInformation)));
|
(dki = GNUNET_new (struct TALER_MINTDB_DenominationKeyIssueInformation)));
|
||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
(dki->denom_priv.rsa_private_key
|
(dki->denom_priv.rsa_private_key
|
||||||
= GNUNET_CRYPTO_rsa_private_key_create (128)));
|
= GNUNET_CRYPTO_rsa_private_key_create (PERF_TALER_MINTDB_RSA_SIZE)));
|
||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
(dki->denom_pub.rsa_public_key =
|
(dki->denom_pub.rsa_public_key =
|
||||||
GNUNET_CRYPTO_rsa_private_key_get_public (dki->denom_priv.rsa_private_key)));
|
GNUNET_CRYPTO_rsa_private_key_get_public (dki->denom_priv.rsa_private_key)));
|
||||||
@ -363,7 +366,7 @@ PERF_TALER_MINTDB_coin_public_info_init ()
|
|||||||
struct TALER_CoinPublicInfo *cpi;
|
struct TALER_CoinPublicInfo *cpi;
|
||||||
|
|
||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
(denom_prv = GNUNET_CRYPTO_rsa_private_key_create (128)));
|
(denom_prv = GNUNET_CRYPTO_rsa_private_key_create (PERF_TALER_MINTDB_RSA_SIZE)));
|
||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
(coin_spent_prv = GNUNET_CRYPTO_eddsa_key_create ()));
|
(coin_spent_prv = GNUNET_CRYPTO_eddsa_key_create ()));
|
||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
|
@ -195,9 +195,18 @@ cmd_clean (struct PERF_TALER_MINTDB_Cmd cmd[])
|
|||||||
static void
|
static void
|
||||||
interpret_end_loop (struct PERF_TALER_MINTDB_interpreter_state *state)
|
interpret_end_loop (struct PERF_TALER_MINTDB_interpreter_state *state)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
int jump = cmd_find (state->cmd,
|
int jump = cmd_find (state->cmd,
|
||||||
state->cmd[state->i].details.end_loop.label_loop);
|
state->cmd[state->i].details.end_loop.label_loop);
|
||||||
|
// Cleaning up the memory in the loop
|
||||||
|
for (i = jump; i < state->i; i++)
|
||||||
|
{
|
||||||
|
// If the exposed variable has not been copied it is freed
|
||||||
|
if ( GNUNET_NO == state->cmd[i].exposed_saved)
|
||||||
|
data_free (&state->cmd[i].exposed, state->cmd[i].exposed_type);
|
||||||
|
state->cmd[i].exposed_saved = GNUNET_NO;
|
||||||
|
}
|
||||||
|
|
||||||
state->cmd[jump].details.loop.curr_iteration++;
|
state->cmd[jump].details.loop.curr_iteration++;
|
||||||
// If the loop is not finished
|
// If the loop is not finished
|
||||||
if (state->cmd[jump].details.loop.max_iterations >
|
if (state->cmd[jump].details.loop.max_iterations >
|
||||||
@ -209,15 +218,6 @@ interpret_end_loop (struct PERF_TALER_MINTDB_interpreter_state *state)
|
|||||||
// Reset the loop counter and continue running
|
// Reset the loop counter and continue running
|
||||||
state->cmd[jump].details.loop.curr_iteration = 0;
|
state->cmd[jump].details.loop.curr_iteration = 0;
|
||||||
}
|
}
|
||||||
// Cleaning up the memory in the loop
|
|
||||||
int j;
|
|
||||||
for (j = jump; j < state->i; j++)
|
|
||||||
{
|
|
||||||
// If the exposed variable has not been copied it is freed
|
|
||||||
if ( GNUNET_NO == state->cmd[j].exposed_saved)
|
|
||||||
data_free (&state->cmd[j].exposed, state->cmd[j].exposed_type);
|
|
||||||
state->cmd[j].exposed_saved = GNUNET_NO;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -366,66 +366,6 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state)
|
|||||||
|
|
||||||
case PERF_TALER_MINTDB_CMD_SAVE_ARRAY:
|
case PERF_TALER_MINTDB_CMD_SAVE_ARRAY:
|
||||||
interpret_save_array (state);
|
interpret_save_array (state);
|
||||||
// {
|
|
||||||
// int loop_index;
|
|
||||||
// int proba;
|
|
||||||
// int rnd;
|
|
||||||
// // Array initialization on first loop iteration
|
|
||||||
// // Alows for nested loops
|
|
||||||
// if (0 == state->cmd[cmd_find (state->cmd,
|
|
||||||
// state->cmd[state->i]
|
|
||||||
// .details.save_array.label_loop)]
|
|
||||||
// .details.loop.curr_iteration)
|
|
||||||
// {
|
|
||||||
// state->cmd[state->i].details.save_array.index = 0;
|
|
||||||
// }
|
|
||||||
// loop_index = cmd_find (state->cmd,
|
|
||||||
// state->cmd[state->i].details.save_array.label_loop);
|
|
||||||
// // The probobility distribution of the saved items will be a little biased
|
|
||||||
// // against the few last items but it should not be a big problem.
|
|
||||||
// proba = state->cmd[loop_index].details.loop.max_iterations /
|
|
||||||
// state->cmd[state->i].details.save_array.nb_saved;
|
|
||||||
// rnd = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, proba);
|
|
||||||
// /*
|
|
||||||
// * If the remaining sapce is equal to the remaining number of
|
|
||||||
// * iterations, the item is automaticly saved.
|
|
||||||
// *
|
|
||||||
// * Else it is saved only if rdn is 0
|
|
||||||
// */
|
|
||||||
// if (((state->cmd[loop_index].details.loop.max_iterations -
|
|
||||||
// state->cmd[loop_index].details.loop.curr_iteration) ==
|
|
||||||
// (state->cmd[state->i].details.save_array.nb_saved -
|
|
||||||
// state->cmd[state->i].details.save_array.index))
|
|
||||||
// || (rnd == 0))
|
|
||||||
// {
|
|
||||||
// union PERF_TALER_MINTDB_Data *save_location;
|
|
||||||
// union PERF_TALER_MINTDB_Data *item_saved;
|
|
||||||
//
|
|
||||||
// save_location = &state->cmd[state->i].details.save_array
|
|
||||||
// .data_saved[state->cmd[state->i].details.save_array.index];
|
|
||||||
// item_saved = &state->cmd[cmd_find (state->cmd,
|
|
||||||
// state->cmd[state->i]
|
|
||||||
// .details.save_array.label_save)]
|
|
||||||
// .exposed;
|
|
||||||
// switch (state->cmd[state->i].details.save_array.type_saved)
|
|
||||||
// {
|
|
||||||
// case PERF_TALER_MINTDB_DEPOSIT:
|
|
||||||
// save_location->deposit = item_saved->deposit;
|
|
||||||
// break;
|
|
||||||
//
|
|
||||||
// case PERF_TALER_MINTDB_TIME:
|
|
||||||
// save_location->time = item_saved->time;
|
|
||||||
// break;
|
|
||||||
//
|
|
||||||
// default:
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// state->cmd[cmd_find (state->cmd,
|
|
||||||
// state->cmd[state->i].details.save_array.label_save)]
|
|
||||||
// .exposed_saved = GNUNET_YES;
|
|
||||||
// state->cmd[state->i].details.save_array.index++;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PERF_TALER_MINTDB_CMD_LOAD_ARRAY:
|
case PERF_TALER_MINTDB_CMD_LOAD_ARRAY:
|
||||||
@ -461,14 +401,14 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state)
|
|||||||
|
|
||||||
case PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT:
|
case PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT:
|
||||||
{
|
{
|
||||||
struct TALER_MINTDB_Deposit *deposit =
|
struct TALER_MINTDB_Deposit *deposit =
|
||||||
PERF_TALER_MINTDB_deposit_init ();
|
PERF_TALER_MINTDB_deposit_init ();
|
||||||
|
|
||||||
GNUNET_assert (
|
GNUNET_assert (
|
||||||
state->plugin->insert_deposit (state->plugin->cls,
|
state->plugin->insert_deposit (state->plugin->cls,
|
||||||
state->session,
|
state->session,
|
||||||
deposit));
|
deposit));
|
||||||
state->cmd[state->i].exposed.deposit = deposit;
|
state->cmd[state->i].exposed.deposit = deposit;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@
|
|||||||
{ \
|
{ \
|
||||||
.command = PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT,\
|
.command = PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT,\
|
||||||
.label = _label, \
|
.label = _label, \
|
||||||
.exposed_type = PERF_TALER_MINTDB_NONE, \
|
.exposed_type = PERF_TALER_MINTDB_DEPOSIT, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -144,7 +144,7 @@
|
|||||||
* Extracts @a _nb_saved items of type @a _save_type
|
* Extracts @a _nb_saved items of type @a _save_type
|
||||||
* from the command @a _label_save during the loop @a _label_loop
|
* from the command @a _label_save during the loop @a _label_loop
|
||||||
*/
|
*/
|
||||||
#define PERF_TALER_MINTDB_INIT_CMD_SAMPLE_ARRAY(_label, _label_loop, _label_save, _nb_saved, _save_type) \
|
#define PERF_TALER_MINTDB_INIT_CMD_SAVE_ARRAY(_label, _label_loop, _label_save, _nb_saved, _save_type) \
|
||||||
{ \
|
{ \
|
||||||
.command = PERF_TALER_MINTDB_CMD_SAVE_ARRAY, \
|
.command = PERF_TALER_MINTDB_CMD_SAVE_ARRAY, \
|
||||||
.label = _label, \
|
.label = _label, \
|
||||||
@ -153,7 +153,7 @@
|
|||||||
.label_loop = _label_loop, \
|
.label_loop = _label_loop, \
|
||||||
.label_save = _label_save, \
|
.label_save = _label_save, \
|
||||||
.nb_saved = _nb_saved, \
|
.nb_saved = _nb_saved, \
|
||||||
.save_type = _save_type \
|
.type_saved = _save_type \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user