[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [taler-merchant] branch master updated: fix leak from insta
From: |
gnunet |
Subject: |
[GNUnet-SVN] [taler-merchant] branch master updated: fix leak from instance-passes not resetting is |
Date: |
Sun, 04 Jun 2017 23:29:07 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository merchant.
The following commit(s) were added to refs/heads/master by this push:
new a2793a5 fix leak from instance-passes not resetting is
a2793a5 is described below
commit a2793a5bdb39b1441ccd61d945092dcc3a282906
Author: Christian Grothoff <address@hidden>
AuthorDate: Sun Jun 4 23:29:04 2017 +0200
fix leak from instance-passes not resetting is
---
src/lib/test_merchant_api.c | 295 +++++++++++++++++++++++---------------------
1 file changed, 153 insertions(+), 142 deletions(-)
diff --git a/src/lib/test_merchant_api.c b/src/lib/test_merchant_api.c
index 0871d21..4b157ee 100644
--- a/src/lib/test_merchant_api.c
+++ b/src/lib/test_merchant_api.c
@@ -772,6 +772,7 @@ history_cb (void *cls,
struct Command *cmd = &is->commands[is->ip];
unsigned int nresult;
+ cmd->details.history.ho = NULL;
if (MHD_HTTP_OK != http_status)
{
fail (is);
@@ -794,6 +795,7 @@ history_cb (void *cls,
next_command (is);
}
+
/**
* Check if the given historic event @a h corresponds to the given
* command @a cmd.
@@ -1019,6 +1021,7 @@ reserve_withdraw_cb (void *cls,
fail (is);
return;
}
+ GNUNET_assert (NULL == cmd->details.reserve_withdraw.sig.rsa_signature);
cmd->details.reserve_withdraw.sig.rsa_signature
= GNUNET_CRYPTO_rsa_signature_dup (sig->rsa_signature);
break;
@@ -1156,9 +1159,7 @@ pay_cb (void *cls,
fail (is);
return;
}
-
}
-
next_command (is);
}
@@ -1235,7 +1236,6 @@ track_transfer_cb (void *cls,
{
case MHD_HTTP_OK:
break;
-
default:
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Unhandled HTTP status.\n");
@@ -1357,6 +1357,153 @@ find_pk (const struct TALER_EXCHANGE_Keys *keys,
/**
+ * Reset the interpreter's state.
+ *
+ * @param is interpreter to reset
+ */
+static void
+cleanup_state (struct InterpreterState *is)
+{
+ struct Command *cmd;
+
+ for (unsigned int i=0;OC_END != (cmd = &is->commands[i])->oc;i++)
+ {
+ switch (cmd->oc)
+ {
+ case OC_END:
+ GNUNET_assert (0);
+ break;
+ case OC_PROPOSAL_LOOKUP:
+ if (NULL != cmd->details.proposal_lookup.plo)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Command %u (%s) did not complete\n",
+ i,
+ cmd->label);
+ TALER_MERCHANT_proposal_lookup_cancel
(cmd->details.proposal_lookup.plo);
+ }
+ break;
+ case OC_ADMIN_ADD_INCOMING:
+ if (NULL != cmd->details.admin_add_incoming.aih)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Command %u (%s) did not complete\n",
+ i,
+ cmd->label);
+ TALER_EXCHANGE_admin_add_incoming_cancel
(cmd->details.admin_add_incoming.aih);
+ cmd->details.admin_add_incoming.aih = NULL;
+ }
+ break;
+ case OC_WITHDRAW_STATUS:
+ if (NULL != cmd->details.reserve_status.wsh)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Command %u (%s) did not complete\n",
+ i,
+ cmd->label);
+ TALER_EXCHANGE_reserve_status_cancel (cmd->details.reserve_status.wsh);
+ cmd->details.reserve_status.wsh = NULL;
+ }
+ break;
+ case OC_WITHDRAW_SIGN:
+ if (NULL != cmd->details.reserve_withdraw.wsh)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Command %u (%s) did not complete\n",
+ i,
+ cmd->label);
+ TALER_EXCHANGE_reserve_withdraw_cancel
(cmd->details.reserve_withdraw.wsh);
+ cmd->details.reserve_withdraw.wsh = NULL;
+ }
+ if (NULL != cmd->details.reserve_withdraw.sig.rsa_signature)
+ {
+ GNUNET_CRYPTO_rsa_signature_free
(cmd->details.reserve_withdraw.sig.rsa_signature);
+ cmd->details.reserve_withdraw.sig.rsa_signature = NULL;
+ }
+ break;
+ case OC_PROPOSAL:
+ if (NULL != cmd->details.proposal.po)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Command %u (%s) did not complete\n",
+ i,
+ cmd->label);
+ TALER_MERCHANT_proposal_cancel (cmd->details.proposal.po);
+ cmd->details.proposal.po = NULL;
+ }
+ if (NULL != cmd->details.proposal.contract_terms)
+ {
+ json_decref (cmd->details.proposal.contract_terms);
+ cmd->details.proposal.contract_terms = NULL;
+ }
+ break;
+ case OC_PAY:
+ if (NULL != cmd->details.pay.ph)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Command %u (%s) did not complete\n",
+ i,
+ cmd->label);
+ TALER_MERCHANT_pay_cancel (cmd->details.pay.ph);
+ cmd->details.pay.ph = NULL;
+ }
+ break;
+ case OC_RUN_AGGREGATOR:
+ if (NULL != cmd->details.run_aggregator.aggregator_proc)
+ {
+ GNUNET_break (0 ==
+ GNUNET_OS_process_kill
(cmd->details.run_aggregator.aggregator_proc,
+ SIGKILL));
+ GNUNET_OS_process_wait (cmd->details.run_aggregator.aggregator_proc);
+ GNUNET_OS_process_destroy
(cmd->details.run_aggregator.aggregator_proc);
+ cmd->details.run_aggregator.aggregator_proc = NULL;
+ }
+ if (NULL != cmd->details.run_aggregator.child_death_task)
+ {
+ GNUNET_SCHEDULER_cancel (cmd->details.run_aggregator.child_death_task);
+ cmd->details.run_aggregator.child_death_task = NULL;
+ }
+ break;
+ case OC_CHECK_BANK_TRANSFER:
+ break;
+ case OC_CHECK_BANK_TRANSFERS_EMPTY:
+ break;
+ case OC_TRACK_TRANSFER:
+ if (NULL != cmd->details.track_transfer.tdo)
+ {
+ TALER_MERCHANT_track_transfer_cancel (cmd->details.track_transfer.tdo);
+ cmd->details.track_transfer.tdo = NULL;
+ }
+ break;
+ case OC_TRACK_TRANSACTION:
+ if (NULL != cmd->details.track_transaction.tth)
+ {
+ TALER_MERCHANT_track_transaction_cancel
(cmd->details.track_transaction.tth);
+ cmd->details.track_transaction.tth = NULL;
+ }
+ break;
+ case OC_HISTORY:
+
+ if (NULL != cmd->details.history.ho)
+ {
+ TALER_MERCHANT_history_cancel (cmd->details.history.ho);
+ cmd->details.history.ho = NULL;
+ }
+ break;
+
+ default:
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Shutdown: unknown instruction %d at %u (%s)\n",
+ cmd->oc,
+ i,
+ cmd->label);
+ break;
+ }
+ }
+}
+
+
+/**
* Run the main interpreter loop that performs exchange operations.
*
* @param cls contains the `struct InterpreterState`
@@ -1398,13 +1545,13 @@ interpreter_run (void *cls)
GNUNET_SCHEDULER_shutdown ();
return;
}
+ cleanup_state (is);
is->ip = 0;
instance_idx++;
instance = instances[instance_idx];
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Switching instance: `%s'\n",
instance);
-
is->task = GNUNET_SCHEDULER_add_now (interpreter_run,
is);
return;
@@ -1865,7 +2012,7 @@ interpreter_run (void *cls)
cmd->details.history.start,
cmd->details.history.nrows,
cmd->details.history.date,
- history_cb,
+ &history_cb,
is)))
{
fail (is);
@@ -1908,8 +2055,6 @@ static void
do_shutdown (void *cls)
{
struct InterpreterState *is = cls;
- struct Command *cmd;
- unsigned int i;
if (NULL != timeout_task)
{
@@ -1918,141 +2063,7 @@ do_shutdown (void *cls)
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Shutdown executing\n");
- for (i=0;OC_END != (cmd = &is->commands[i])->oc;i++)
- {
- switch (cmd->oc)
- {
- case OC_END:
- GNUNET_assert (0);
- break;
- case OC_PROPOSAL_LOOKUP:
- if (NULL != cmd->details.proposal_lookup.plo)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Command %u (%s) did not complete\n",
- i,
- cmd->label);
- TALER_MERCHANT_proposal_lookup_cancel
(cmd->details.proposal_lookup.plo);
- }
- break;
-
- case OC_ADMIN_ADD_INCOMING:
- if (NULL != cmd->details.admin_add_incoming.aih)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Command %u (%s) did not complete\n",
- i,
- cmd->label);
- TALER_EXCHANGE_admin_add_incoming_cancel
(cmd->details.admin_add_incoming.aih);
- cmd->details.admin_add_incoming.aih = NULL;
- }
- break;
- case OC_WITHDRAW_STATUS:
- if (NULL != cmd->details.reserve_status.wsh)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Command %u (%s) did not complete\n",
- i,
- cmd->label);
- TALER_EXCHANGE_reserve_status_cancel (cmd->details.reserve_status.wsh);
- cmd->details.reserve_status.wsh = NULL;
- }
- break;
- case OC_WITHDRAW_SIGN:
- if (NULL != cmd->details.reserve_withdraw.wsh)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Command %u (%s) did not complete\n",
- i,
- cmd->label);
- TALER_EXCHANGE_reserve_withdraw_cancel
(cmd->details.reserve_withdraw.wsh);
- cmd->details.reserve_withdraw.wsh = NULL;
- }
- if (NULL != cmd->details.reserve_withdraw.sig.rsa_signature)
- {
- GNUNET_CRYPTO_rsa_signature_free
(cmd->details.reserve_withdraw.sig.rsa_signature);
- cmd->details.reserve_withdraw.sig.rsa_signature = NULL;
- }
- break;
- case OC_PROPOSAL:
- if (NULL != cmd->details.proposal.po)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Command %u (%s) did not complete\n",
- i,
- cmd->label);
- TALER_MERCHANT_proposal_cancel (cmd->details.proposal.po);
- cmd->details.proposal.po = NULL;
- }
- if (NULL != cmd->details.proposal.contract_terms)
- {
- json_decref (cmd->details.proposal.contract_terms);
- cmd->details.proposal.contract_terms = NULL;
- }
- break;
- case OC_PAY:
- if (NULL != cmd->details.pay.ph)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Command %u (%s) did not complete\n",
- i,
- cmd->label);
- TALER_MERCHANT_pay_cancel (cmd->details.pay.ph);
- cmd->details.pay.ph = NULL;
- }
- break;
- case OC_RUN_AGGREGATOR:
- if (NULL != cmd->details.run_aggregator.aggregator_proc)
- {
- GNUNET_break (0 ==
- GNUNET_OS_process_kill
(cmd->details.run_aggregator.aggregator_proc,
- SIGKILL));
- GNUNET_OS_process_wait (cmd->details.run_aggregator.aggregator_proc);
- GNUNET_OS_process_destroy
(cmd->details.run_aggregator.aggregator_proc);
- cmd->details.run_aggregator.aggregator_proc = NULL;
- }
- if (NULL != cmd->details.run_aggregator.child_death_task)
- {
- GNUNET_SCHEDULER_cancel (cmd->details.run_aggregator.child_death_task);
- cmd->details.run_aggregator.child_death_task = NULL;
- }
- break;
- case OC_CHECK_BANK_TRANSFER:
- break;
- case OC_CHECK_BANK_TRANSFERS_EMPTY:
- break;
- case OC_TRACK_TRANSFER:
- if (NULL != cmd->details.track_transfer.tdo)
- {
- TALER_MERCHANT_track_transfer_cancel (cmd->details.track_transfer.tdo);
- cmd->details.track_transfer.tdo = NULL;
- }
- break;
- case OC_TRACK_TRANSACTION:
- if (NULL != cmd->details.track_transaction.tth)
- {
- TALER_MERCHANT_track_transaction_cancel
(cmd->details.track_transaction.tth);
- cmd->details.track_transaction.tth = NULL;
- }
- break;
- case OC_HISTORY:
-
- if (NULL != cmd->details.history.ho)
- {
- TALER_MERCHANT_history_cancel (cmd->details.history.ho);
- cmd->details.history.ho = NULL;
- }
- break;
-
- default:
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Shutdown: unknown instruction %d at %u (%s)\n",
- cmd->oc,
- i,
- cmd->label);
- break;
- }
- }
+ cleanup_state (is);
if (NULL != is->task)
{
GNUNET_SCHEDULER_cancel (is->task);
--
To stop receiving notification emails like this one, please contact
address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] [taler-merchant] branch master updated: fix leak from instance-passes not resetting is,
gnunet <=