From 421b4f403f182cbd8e7ee6faa63fba6f2c412ae7 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 9 Jun 2016 15:20:24 +0200 Subject: integrate child_death_task with aggregator struct, and cancel it on error --- src/exchange-lib/test_exchange_api.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'src/exchange-lib/test_exchange_api.c') diff --git a/src/exchange-lib/test_exchange_api.c b/src/exchange-lib/test_exchange_api.c index 102c37b08..34e9da83b 100644 --- a/src/exchange-lib/test_exchange_api.c +++ b/src/exchange-lib/test_exchange_api.c @@ -585,6 +585,11 @@ struct Command */ struct GNUNET_OS_Process *aggregator_proc; + /** + * ID of task called whenever we get a SIGCHILD. + */ + struct GNUNET_SCHEDULER_Task *child_death_task; + } run_aggregator; struct { @@ -681,12 +686,6 @@ struct InterpreterState */ static struct GNUNET_DISK_PipeHandle *sigpipe; -/** - * ID of task called whenever we get a SIGCHILD. - */ -static struct GNUNET_SCHEDULER_Task *child_death_task; - - /** * The testcase failed, return with an error code. @@ -1266,7 +1265,7 @@ maint_child_death (void *cls) const struct GNUNET_DISK_FileHandle *pr; char c[16]; - child_death_task = NULL; + cmd->details.run_aggregator.child_death_task = NULL; pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ); GNUNET_break (0 < GNUNET_DISK_file_read (pr, &c, sizeof (c))); GNUNET_OS_process_wait (cmd->details.run_aggregator.aggregator_proc); @@ -2233,9 +2232,10 @@ interpreter_run (void *cls) return; } pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ); - child_death_task = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, - pr, - &maint_child_death, is); + cmd->details.run_aggregator.child_death_task + = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, + pr, + &maint_child_death, is); return; } case OC_CHECK_BANK_TRANSFER: @@ -2547,6 +2547,11 @@ do_shutdown (void *cls) 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; -- cgit v1.2.3