From 3c8dd575bcc3f22b58b13f4cb096c57f076bf2e4 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Fri, 21 Oct 2011 15:54:30 +0000 Subject: order of sending ack and notification --- src/fragmentation/defragmentation.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src/fragmentation/defragmentation.c') diff --git a/src/fragmentation/defragmentation.c b/src/fragmentation/defragmentation.c index 6246163a6..b07f20407 100644 --- a/src/fragmentation/defragmentation.c +++ b/src/fragmentation/defragmentation.c @@ -519,21 +519,26 @@ GNUNET_DEFRAGMENT_process_fragment (struct GNUNET_DEFRAGMENT_Context *dc, for (b = 0; b < 64; b++) if (0 != (mc->bits & (1LL << b))) bc++; + + /* notify about complete message */ + if ((duplicate == GNUNET_NO) && (0 == mc->bits)) + { + GNUNET_STATISTICS_update (dc->stats, _("# messages defragmented"), 1, + GNUNET_NO); + /* message complete, notify! */ + dc->proc (dc->cls, mc->msg); + } + /* send ACK */ if (mc->frag_times_write_offset - mc->frag_times_start_offset > 1) dc->latency = estimate_latency (mc); delay = GNUNET_TIME_relative_multiply (dc->latency, bc + 1); if ((0 == mc->bits) || (GNUNET_YES == duplicate)) /* message complete or duplicate, ACK now! */ + { delay = GNUNET_TIME_UNIT_ZERO; + } if (GNUNET_SCHEDULER_NO_TASK != mc->ack_task) GNUNET_SCHEDULER_cancel (mc->ack_task); mc->ack_task = GNUNET_SCHEDULER_add_delayed (delay, &send_ack, mc); - if ((duplicate == GNUNET_NO) && (0 == mc->bits)) - { - GNUNET_STATISTICS_update (dc->stats, _("# messages defragmented"), 1, - GNUNET_NO); - /* message complete, notify! */ - dc->proc (dc->cls, mc->msg); - } if (duplicate == GNUNET_YES) return GNUNET_NO; return GNUNET_YES; -- cgit v1.2.3