From 23066715ced62f6a813b130911f705566f2322fd Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 21 Oct 2011 18:44:26 +0000 Subject: [PATCH] fix segfault introduced by recent refactoring --- src/fragmentation/test_fragmentation.c | 37 ++++++++++++++++++-------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/fragmentation/test_fragmentation.c b/src/fragmentation/test_fragmentation.c index 14901cf68..8f0be87a5 100644 --- a/src/fragmentation/test_fragmentation.c +++ b/src/fragmentation/test_fragmentation.c @@ -62,6 +62,28 @@ static struct GNUNET_BANDWIDTH_Tracker trackers[NUM_MSGS]; static struct GNUNET_FRAGMENT_Context *frags[NUM_MSGS]; +static GNUNET_SCHEDULER_TaskIdentifier shutdown_task; + +static void +do_shutdown (void *cls, + const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + unsigned int i; + + ret = 0; + shutdown_task = GNUNET_SCHEDULER_NO_TASK; + GNUNET_DEFRAGMENT_context_destroy (defrag); + defrag = NULL; + for (i = 0; i < NUM_MSGS; i++) + { + if (frags[i] == NULL) + continue; + GNUNET_FRAGMENT_context_destroy (frags[i]); + frags[i] = NULL; + } +} + + static void proc_msgs (void *cls, const struct GNUNET_MessageHeader *hdr) { @@ -81,18 +103,11 @@ proc_msgs (void *cls, const struct GNUNET_MessageHeader *hdr) fprintf (stderr, "."); #endif /* tolerate 10% loss, i.e. due to duplicate fragment IDs */ - if (total >= NUM_MSGS - (NUM_MSGS / 10)) + if ( (total >= NUM_MSGS - (NUM_MSGS / 10)) && + (ret != 0) ) { - ret = 0; - GNUNET_DEFRAGMENT_context_destroy (defrag); - defrag = NULL; - for (i = 0; i < NUM_MSGS; i++) - { - if (frags[i] == NULL) - continue; - GNUNET_FRAGMENT_context_destroy (frags[i]); - frags[i] = NULL; - } + if (GNUNET_SCHEDULER_NO_TASK == shutdown_task) + shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); } } -- 2.25.1