From 1c2be591d3e77002c4b1d5095c06e434d9ad62fe Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 2 May 2016 02:33:14 +0200 Subject: fixing #4479 --- src/bank-lib/test_bank_api.c | 8 ++- src/exchange-lib/test_exchange_api.c | 89 ++++++++++++++------------- src/exchange-lib/test_exchange_api.conf | 9 ++- src/exchange/test_taler_exchange_aggregator.c | 2 - src/wire/plugin_wire_test.c | 10 +-- 5 files changed, 65 insertions(+), 53 deletions(-) (limited to 'src') diff --git a/src/bank-lib/test_bank_api.c b/src/bank-lib/test_bank_api.c index fe02fb8e5..019b09976 100644 --- a/src/bank-lib/test_bank_api.c +++ b/src/bank-lib/test_bank_api.c @@ -171,9 +171,11 @@ context_task (void *cls); /** * Run the context task, the working set has changed. + * + * @param cls NULL */ static void -trigger_context_task () +trigger_context_task (void *cls) { GNUNET_SCHEDULER_cancel (ctx_task); ctx_task = GNUNET_SCHEDULER_add_now (&context_task, @@ -333,7 +335,6 @@ interpreter_run (void *cls) fail (is); return; } - trigger_context_task (); return; default: GNUNET_log (GNUNET_ERROR_TYPE_ERROR, @@ -486,7 +487,8 @@ run (void *cls) is = GNUNET_new (struct InterpreterState); is->commands = commands; - ctx = GNUNET_CURL_init (); + ctx = GNUNET_CURL_init (&trigger_context_task, + NULL); GNUNET_assert (NULL != ctx); ctx_task = GNUNET_SCHEDULER_add_now (&context_task, ctx); diff --git a/src/exchange-lib/test_exchange_api.c b/src/exchange-lib/test_exchange_api.c index 2936f68fb..1ab09c9c4 100644 --- a/src/exchange-lib/test_exchange_api.c +++ b/src/exchange-lib/test_exchange_api.c @@ -48,9 +48,9 @@ static struct GNUNET_CURL_Context *ctx; static struct TALER_EXCHANGE_Handle *exchange; /** - * Task run on shutdown. + * Task run on timeout. */ -static struct GNUNET_SCHEDULER_Task *shutdown_task; +static struct GNUNET_SCHEDULER_Task *timeout_task; /** * Task that runs the main event loop. @@ -569,27 +569,6 @@ struct InterpreterState }; -/** - * Task that runs the context's event loop with the GNUnet scheduler. - * - * @param cls unused - */ -static void -context_task (void *cls); - - -/** - * Run the context task, the working set has changed. - */ -static void -trigger_context_task () -{ - GNUNET_SCHEDULER_cancel (ctx_task); - ctx_task = GNUNET_SCHEDULER_add_now (&context_task, - NULL); -} - - /** * The testcase failed, return with an error code. * @@ -1499,7 +1478,6 @@ interpreter_run (void *cls) fail (is); return; } - trigger_context_task (); return; case OC_WITHDRAW_STATUS: GNUNET_assert (NULL != @@ -1515,7 +1493,6 @@ interpreter_run (void *cls) &reserve_pub, &reserve_status_cb, is); - trigger_context_task (); return; case OC_WITHDRAW_SIGN: GNUNET_assert (NULL != @@ -1575,7 +1552,6 @@ interpreter_run (void *cls) fail (is); return; } - trigger_context_task (); return; case OC_DEPOSIT: { @@ -1728,7 +1704,6 @@ interpreter_run (void *cls) return; } json_decref (wire); - trigger_context_task (); return; } case OC_REFRESH_MELT: @@ -1826,7 +1801,6 @@ interpreter_run (void *cls) } } } - trigger_context_task (); return; case OC_REFRESH_REVEAL: ref = find_command (is, @@ -1845,7 +1819,6 @@ interpreter_run (void *cls) fail (is); return; } - trigger_context_task (); return; case OC_REFRESH_LINK: /* find reveal command */ @@ -1885,13 +1858,11 @@ interpreter_run (void *cls) fail (is); return; } - trigger_context_task (); return; case OC_WIRE: cmd->details.wire.wh = TALER_EXCHANGE_wire (exchange, &wire_cb, is); - trigger_context_task (); return; case OC_WIRE_DEPOSITS: if (NULL != cmd->details.wire_deposits.wtid_ref) @@ -1906,7 +1877,6 @@ interpreter_run (void *cls) &cmd->details.wire_deposits.wtid, &wire_deposits_cb, is); - trigger_context_task (); return; case OC_DEPOSIT_WTID: { @@ -1969,7 +1939,6 @@ interpreter_run (void *cls) ref->details.deposit.transaction_id, &deposit_wtid_cb, is); - trigger_context_task (); } return; default: @@ -1984,6 +1953,19 @@ interpreter_run (void *cls) } +/** + * Function run when the test terminates (good or bad) with timeout. + * + * @param cls NULL + */ +static void +do_timeout (void *cls) +{ + timeout_task = NULL; + GNUNET_SCHEDULER_shutdown (); +} + + /** * Function run when the test terminates (good or bad). * Cleans up our state. @@ -1997,7 +1979,6 @@ do_shutdown (void *cls) struct Command *cmd; unsigned int i; - shutdown_task = NULL; for (i=0;OC_END != (cmd = &is->commands[i])->oc;i++) { switch (cmd->oc) @@ -2156,11 +2137,6 @@ do_shutdown (void *cls) is->task = NULL; } GNUNET_free (is); - if (NULL != ctx_task) - { - GNUNET_SCHEDULER_cancel (ctx_task); - ctx_task = NULL; - } if (NULL != exchange) { TALER_EXCHANGE_disconnect (exchange); @@ -2171,6 +2147,16 @@ do_shutdown (void *cls) GNUNET_CURL_fini (ctx); ctx = NULL; } + if (NULL != ctx_task) + { + GNUNET_SCHEDULER_cancel (ctx_task); + ctx_task = NULL; + } + if (NULL != timeout_task) + { + GNUNET_SCHEDULER_cancel (timeout_task); + timeout_task = NULL; + } } @@ -2262,6 +2248,23 @@ context_task (void *cls) } +/** + * Run the context task, the working set has changed. + * + * @param cls NULL + */ +static void +trigger_context_task (void *cls) +{ + if (NULL == ctx) + return; + if (NULL != ctx_task) + GNUNET_SCHEDULER_cancel (ctx_task); + ctx_task = GNUNET_SCHEDULER_add_now (&context_task, + NULL); +} + + /** * Main function that will be run by the scheduler. * @@ -2507,7 +2510,8 @@ run (void *cls) is = GNUNET_new (struct InterpreterState); is->commands = commands; - ctx = GNUNET_CURL_init (); + ctx = GNUNET_CURL_init (&trigger_context_task, + NULL); GNUNET_assert (NULL != ctx); ctx_task = GNUNET_SCHEDULER_add_now (&context_task, ctx); @@ -2516,10 +2520,11 @@ run (void *cls) &cert_cb, is, TALER_EXCHANGE_OPTION_END); GNUNET_assert (NULL != exchange); - shutdown_task + timeout_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 150), - &do_shutdown, is); + &do_timeout, NULL); + GNUNET_SCHEDULER_add_shutdown (&do_shutdown, is); } diff --git a/src/exchange-lib/test_exchange_api.conf b/src/exchange-lib/test_exchange_api.conf index 5fcc36552..a8c690786 100644 --- a/src/exchange-lib/test_exchange_api.conf +++ b/src/exchange-lib/test_exchange_api.conf @@ -30,12 +30,17 @@ TESTRUN = YES [exchangedb-postgres] DB_CONN_STR = "postgres:///talercheck" -[wire-incoming-test] +[exchange-wire-incoming-sepa] +# This is the response we give out for the /wire request. It provides +# wallets with the bank information for transfers to the exchange. +SEPA_RESPONSE_FILE = ${TALER_CONFIG_HOME}/sepa.json + +[exchange-wire-incoming-test] # This is the response we give out for the /wire request. It provides # wallets with the bank information for transfers to the exchange. TEST_RESPONSE_FILE = ${TALER_CONFIG_HOME}/test.json -[wire-outgoing-test] +[exchange-wire-outgoing-test] # What is the main website of the bank? BANK_URI = "http://localhost:8082/" # Into which account at the 'bank' should (incoming) wire transfers be made? diff --git a/src/exchange/test_taler_exchange_aggregator.c b/src/exchange/test_taler_exchange_aggregator.c index 7d1991754..d9052ec7d 100644 --- a/src/exchange/test_taler_exchange_aggregator.c +++ b/src/exchange/test_taler_exchange_aggregator.c @@ -304,11 +304,9 @@ maint_child_death (void *cls) const struct GNUNET_DISK_FileHandle *pr; char c[16]; struct State *state; - const struct GNUNET_SCHEDULER_TaskContext *tc; child_death_task = NULL; pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ); - tc = GNUNET_SCHEDULER_get_task_context (); GNUNET_break (0 < GNUNET_DISK_file_read (pr, &c, sizeof (c))); GNUNET_OS_process_wait (aggregator_proc); GNUNET_OS_process_destroy (aggregator_proc); diff --git a/src/wire/plugin_wire_test.c b/src/wire/plugin_wire_test.c index 80e5aaa8f..07072f27a 100644 --- a/src/wire/plugin_wire_test.c +++ b/src/wire/plugin_wire_test.c @@ -191,11 +191,13 @@ context_task (void *cls) /** * Run the bank task now. * - * @param tc context for which we should initiate running the task + * @param cls context for which we should initiate running the task */ static void -run_bt (struct TestClosure *tc) +run_bt (void *cls) { + struct TestClosure *tc = cls; + if (NULL != tc->bt) GNUNET_SCHEDULER_cancel (tc->bt); tc->bt = GNUNET_SCHEDULER_add_now (&context_task, @@ -751,7 +753,6 @@ test_execute_wire_transfer (void *cls, GNUNET_free (eh); return NULL; } - run_bt (tc); return eh; } @@ -831,7 +832,8 @@ libtaler_plugin_wire_test_init (void *cls) GNUNET_free (tc); return NULL; } - tc->ctx = GNUNET_CURL_init (); + tc->ctx = GNUNET_CURL_init (&run_bt, + tc); if (NULL == tc->ctx) { GNUNET_break (0); -- cgit v1.2.3