diff options
Diffstat (limited to 'src/exchange-lib/test_exchange_api.c')
-rw-r--r-- | src/exchange-lib/test_exchange_api.c | 89 |
1 files changed, 47 insertions, 42 deletions
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. @@ -570,27 +570,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. * * @param is interpreter state to clean up @@ -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: @@ -1985,6 +1954,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; + } } @@ -2263,6 +2249,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. * * @param cls closure @@ -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); } |