aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFournier Nicolas <nicolas.fournier@ensta-paristech.fr>2015-06-17 17:24:08 +0200
committerFournier Nicolas <nicolas.fournier@ensta-paristech.fr>2015-06-17 17:24:08 +0200
commit6f02d4e355d6152fb61098a27ed6b2e3b98358a2 (patch)
tree2c27957e221962b367533c3ce3b8f9d3c2abb1ba
parent6ffe1d5dbaaf38d3e7679cacd6303be3dba15764 (diff)
fixed memory leak
-rw-r--r--src/mintdb/perf_taler_mintdb.c11
-rw-r--r--src/mintdb/perf_taler_mintdb_init.c13
-rw-r--r--src/mintdb/perf_taler_mintdb_interpreter.c96
-rw-r--r--src/mintdb/perf_taler_mintdb_interpreter.h6
4 files changed, 36 insertions, 90 deletions
diff --git a/src/mintdb/perf_taler_mintdb.c b/src/mintdb/perf_taler_mintdb.c
index c7e8c3552..040a473f5 100644
--- a/src/mintdb/perf_taler_mintdb.c
+++ b/src/mintdb/perf_taler_mintdb.c
@@ -33,27 +33,30 @@ main (int argc, char ** argv)
struct GNUNET_CONFIGURATION_Handle *config;
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_INSERT_DEPOSIT ("init_deposit_insert"),
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")
};
-
+ // Plugin init
config = GNUNET_CONFIGURATION_create();
GNUNET_CONFIGURATION_load(config, "./test-mint-db-postgres.conf");
GNUNET_assert (NULL !=
(plugin = TALER_MINTDB_plugin_load (config)));
plugin->create_tables (plugin->cls, GNUNET_YES);
+ // Run command
PERF_TALER_MINTDB_interpret(plugin, test);
+ // Drop tables
{
struct TALER_MINTDB_Session *session;
session = plugin->get_session (plugin->cls, GNUNET_YES);
plugin->drop_temporary (plugin->cls, session);
}
-
TALER_MINTDB_plugin_unload(plugin);
GNUNET_CONFIGURATION_destroy(config);
return GNUNET_OK;
diff --git a/src/mintdb/perf_taler_mintdb_init.c b/src/mintdb/perf_taler_mintdb_init.c
index 3478af0e0..4ada307bc 100644
--- a/src/mintdb/perf_taler_mintdb_init.c
+++ b/src/mintdb/perf_taler_mintdb_init.c
@@ -26,6 +26,7 @@
#define CURRENCY "EUR"
+#define PERF_TALER_MINTDB_RSA_SIZE 256
/**
@@ -193,7 +194,9 @@ PERF_TALER_MINTDB_deposit_init ()
GNUNET_assert (NULL !=
(eddsa_prvt = GNUNET_CRYPTO_eddsa_key_create ()));
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 !=
(coin.denom_pub.rsa_public_key =
GNUNET_CRYPTO_rsa_private_key_get_public (rsa_prv)));
@@ -202,8 +205,7 @@ PERF_TALER_MINTDB_deposit_init ()
GNUNET_CRYPTO_rsa_sign (rsa_prv,
&coin.coin_pub.eddsa_pub,
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_free (eddsa_prvt);
}
@@ -273,6 +275,7 @@ PERF_TALER_MINTDB_deposit_free (struct TALER_MINTDB_Deposit *deposit)
return GNUNET_OK;
GNUNET_CRYPTO_rsa_public_key_free (deposit->coin.denom_pub.rsa_public_key);
GNUNET_CRYPTO_rsa_signature_free (deposit->coin.denom_sig.rsa_signature);
+ json_decref (deposit->wire);
GNUNET_free (deposit);
return GNUNET_OK;
@@ -294,7 +297,7 @@ PERF_TALER_MINTDB_denomination_init ()
(dki = GNUNET_new (struct TALER_MINTDB_DenominationKeyIssueInformation)));
GNUNET_assert (NULL !=
(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 !=
(dki->denom_pub.rsa_public_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;
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 !=
(coin_spent_prv = GNUNET_CRYPTO_eddsa_key_create ()));
GNUNET_assert (NULL !=
diff --git a/src/mintdb/perf_taler_mintdb_interpreter.c b/src/mintdb/perf_taler_mintdb_interpreter.c
index b92d6dc32..71972de2a 100644
--- a/src/mintdb/perf_taler_mintdb_interpreter.c
+++ b/src/mintdb/perf_taler_mintdb_interpreter.c
@@ -195,9 +195,18 @@ cmd_clean (struct PERF_TALER_MINTDB_Cmd cmd[])
static void
interpret_end_loop (struct PERF_TALER_MINTDB_interpreter_state *state)
{
+ int i;
int jump = cmd_find (state->cmd,
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++;
// If the loop is not finished
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
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
@@ -366,66 +366,6 @@ interpret (struct PERF_TALER_MINTDB_interpreter_state *state)
case PERF_TALER_MINTDB_CMD_SAVE_ARRAY:
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;
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:
{
- struct TALER_MINTDB_Deposit *deposit =
- PERF_TALER_MINTDB_deposit_init ();
-
- GNUNET_assert (
- state->plugin->insert_deposit (state->plugin->cls,
- state->session,
- deposit));
- state->cmd[state->i].exposed.deposit = deposit;
+ struct TALER_MINTDB_Deposit *deposit =
+ PERF_TALER_MINTDB_deposit_init ();
+
+ GNUNET_assert (
+ state->plugin->insert_deposit (state->plugin->cls,
+ state->session,
+ deposit));
+ state->cmd[state->i].exposed.deposit = deposit;
}
break;
diff --git a/src/mintdb/perf_taler_mintdb_interpreter.h b/src/mintdb/perf_taler_mintdb_interpreter.h
index 53dfae388..c56414730 100644
--- a/src/mintdb/perf_taler_mintdb_interpreter.h
+++ b/src/mintdb/perf_taler_mintdb_interpreter.h
@@ -125,7 +125,7 @@
{ \
.command = PERF_TALER_MINTDB_CMD_INSERT_DEPOSIT,\
.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
* 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, \
.label = _label, \
@@ -153,7 +153,7 @@
.label_loop = _label_loop, \
.label_save = _label_save, \
.nb_saved = _nb_saved, \
- .save_type = _save_type \
+ .type_saved = _save_type \
} \
}