aboutsummaryrefslogtreecommitdiff
path: root/src/fragmentation
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-08-01 18:31:12 +0000
committerChristian Grothoff <christian@grothoff.org>2011-08-01 18:31:12 +0000
commit7824120f64433bee7048d983a7d5fc2ff91d1d14 (patch)
tree6c10edeaba18df433288cd3015c8ec8a464d5f5a /src/fragmentation
parent1643c64169883ed1b9c860e3e1146a503f251f0a (diff)
downloadgnunet-7824120f64433bee7048d983a7d5fc2ff91d1d14.tar.gz
gnunet-7824120f64433bee7048d983a7d5fc2ff91d1d14.zip
fix
Diffstat (limited to 'src/fragmentation')
-rw-r--r--src/fragmentation/fragmentation.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/fragmentation/fragmentation.c b/src/fragmentation/fragmentation.c
index e97b0f763..81db1b831 100644
--- a/src/fragmentation/fragmentation.c
+++ b/src/fragmentation/fragmentation.c
@@ -79,6 +79,12 @@ struct GNUNET_FRAGMENT_Context
79 uint64_t acks; 79 uint64_t acks;
80 80
81 /** 81 /**
82 * Bitfield with all possible bits for 'acks' (used to mask the
83 * ack we get back).
84 */
85 uint64_t acks_mask;
86
87 /**
82 * Task performing work for the fragmenter. 88 * Task performing work for the fragmenter.
83 */ 89 */
84 GNUNET_SCHEDULER_TaskIdentifier task; 90 GNUNET_SCHEDULER_TaskIdentifier task;
@@ -268,9 +274,10 @@ GNUNET_FRAGMENT_context_create (struct GNUNET_STATISTICS_Handle *stats,
268 bits = (size + mtu - sizeof (struct FragmentHeader) - 1) / (mtu - sizeof (struct FragmentHeader)); 274 bits = (size + mtu - sizeof (struct FragmentHeader) - 1) / (mtu - sizeof (struct FragmentHeader));
269 GNUNET_assert (bits <= 64); 275 GNUNET_assert (bits <= 64);
270 if (bits == 64) 276 if (bits == 64)
271 fc->acks = UINT64_MAX; /* set all 64 bit */ 277 fc->acks_mask = UINT64_MAX; /* set all 64 bit */
272 else 278 else
273 fc->acks = (1LL << bits) - 1; /* set lowest 'bits' bit */ 279 fc->acks_mask = (1LL << bits) - 1; /* set lowest 'bits' bit */
280 fc->acks = fc->acks_mask;
274 fc->task = GNUNET_SCHEDULER_add_now (&transmit_next, 281 fc->task = GNUNET_SCHEDULER_add_now (&transmit_next,
275 fc); 282 fc);
276 return fc; 283 return fc;
@@ -343,7 +350,7 @@ GNUNET_FRAGMENT_process_ack (struct GNUNET_FRAGMENT_Context *fc,
343 _("# bits removed from fragmentation ACKs"), 350 _("# bits removed from fragmentation ACKs"),
344 1, GNUNET_NO); 351 1, GNUNET_NO);
345 } 352 }
346 fc->acks = abits; 353 fc->acks = abits & fc->acks_mask;
347 if (0 != fc->acks) 354 if (0 != fc->acks)
348 { 355 {
349 /* more to transmit, do so right now (if tracker permits...) */ 356 /* more to transmit, do so right now (if tracker permits...) */