diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-08-01 18:31:12 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-08-01 18:31:12 +0000 |
commit | 7824120f64433bee7048d983a7d5fc2ff91d1d14 (patch) | |
tree | 6c10edeaba18df433288cd3015c8ec8a464d5f5a /src/fragmentation | |
parent | 1643c64169883ed1b9c860e3e1146a503f251f0a (diff) | |
download | gnunet-7824120f64433bee7048d983a7d5fc2ff91d1d14.tar.gz gnunet-7824120f64433bee7048d983a7d5fc2ff91d1d14.zip |
fix
Diffstat (limited to 'src/fragmentation')
-rw-r--r-- | src/fragmentation/fragmentation.c | 13 |
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...) */ |