diff options
author | Bart Polot <bart@net.in.tum.de> | 2012-09-20 12:29:11 +0000 |
---|---|---|
committer | Bart Polot <bart@net.in.tum.de> | 2012-09-20 12:29:11 +0000 |
commit | 44f59242570e7bcf3ea760f8965fda627748f61a (patch) | |
tree | af1944132f1b2ad994e60ad640b5573042ae2f60 | |
parent | 0e31b80f2f0e8acc07bb1e399b8941f08ef96fd5 (diff) | |
download | gnunet-44f59242570e7bcf3ea760f8965fda627748f61a.tar.gz gnunet-44f59242570e7bcf3ea760f8965fda627748f61a.zip |
- log timeout, try to fix ACK for min_speed
-rw-r--r-- | src/mesh/gnunet-service-mesh.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/mesh/gnunet-service-mesh.c b/src/mesh/gnunet-service-mesh.c index 3163615d2..914862c33 100644 --- a/src/mesh/gnunet-service-mesh.c +++ b/src/mesh/gnunet-service-mesh.c | |||
@@ -3672,7 +3672,7 @@ tunnel_get_fwd_ack (struct MeshTunnel *t) | |||
3672 | 3672 | ||
3673 | count = t->fwd_pid - t->skip; | 3673 | count = t->fwd_pid - t->skip; |
3674 | buffer_free = t->fwd_queue_max - t->fwd_queue_n; | 3674 | buffer_free = t->fwd_queue_max - t->fwd_queue_n; |
3675 | ack = count + buffer_free; // Might overflow 32 bits, it's ok! | 3675 | ack = count; |
3676 | child_ack = tunnel_get_children_fwd_ack (t); | 3676 | child_ack = tunnel_get_children_fwd_ack (t); |
3677 | client_ack = tunnel_get_clients_fwd_ack (t); | 3677 | client_ack = tunnel_get_clients_fwd_ack (t); |
3678 | if (-1LL == child_ack) | 3678 | if (-1LL == child_ack) |
@@ -3683,16 +3683,16 @@ tunnel_get_fwd_ack (struct MeshTunnel *t) | |||
3683 | } | 3683 | } |
3684 | if (-1LL == client_ack) | 3684 | if (-1LL == client_ack) |
3685 | { | 3685 | { |
3686 | client_ack = ack; | 3686 | client_ack = ack + buffer_free; // Might overflow 32 bits, it's ok! |
3687 | } | 3687 | } |
3688 | if (GNUNET_YES == t->speed_min) | 3688 | if (GNUNET_YES == t->speed_min) |
3689 | { | 3689 | { |
3690 | ack = GMC_min_pid ((uint32_t) child_ack, ack); | 3690 | ack = GMC_min_pid ((uint32_t) child_ack, ack) + buffer_free; // Might overflow 32 bits, it's ok!; |
3691 | ack = GMC_min_pid ((uint32_t) client_ack, ack); | 3691 | ack = GMC_min_pid ((uint32_t) client_ack, ack); |
3692 | } | 3692 | } |
3693 | else | 3693 | else |
3694 | { | 3694 | { |
3695 | ack = GMC_max_pid ((uint32_t) child_ack, ack); | 3695 | ack = GMC_max_pid ((uint32_t) child_ack, ack) + buffer_free; // Might overflow 32 bits, it's ok!; |
3696 | ack = GMC_max_pid ((uint32_t) client_ack, ack); | 3696 | ack = GMC_max_pid ((uint32_t) client_ack, ack); |
3697 | } | 3697 | } |
3698 | if (GNUNET_YES == t->nobuffer && GMC_is_pid_bigger(ack, t->fwd_pid)) | 3698 | if (GNUNET_YES == t->nobuffer && GMC_is_pid_bigger(ack, t->fwd_pid)) |
@@ -3818,7 +3818,7 @@ tunnel_send_fwd_ack (struct MeshTunnel *t, uint16_t type) | |||
3818 | } | 3818 | } |
3819 | 3819 | ||
3820 | /* Check if we need no retransmit the ACK */ | 3820 | /* Check if we need no retransmit the ACK */ |
3821 | if (t->fwd_queue_max > t->fwd_queue_n * 2 && | 3821 | if (t->fwd_queue_max > t->fwd_queue_n * 4 && |
3822 | GMC_is_pid_bigger(t->last_fwd_ack, t->fwd_pid)) | 3822 | GMC_is_pid_bigger(t->last_fwd_ack, t->fwd_pid)) |
3823 | { | 3823 | { |
3824 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Not sending ACK, buffer free\n"); | 3824 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Not sending ACK, buffer free\n"); |
@@ -4337,7 +4337,12 @@ static void | |||
4337 | tunnel_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | 4337 | tunnel_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
4338 | { | 4338 | { |
4339 | struct MeshTunnel *t = cls; | 4339 | struct MeshTunnel *t = cls; |
4340 | struct GNUNET_PeerIdentity id; | ||
4340 | 4341 | ||
4342 | GNUNET_PEER_resolve(t->id.oid, &id); | ||
4343 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
4344 | "Tunnel %s [%X] timed out. Destroying.\n", | ||
4345 | GNUNET_i2s(&id), t->id.tid); | ||
4341 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) | 4346 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) |
4342 | return; | 4347 | return; |
4343 | t->timeout_task = GNUNET_SCHEDULER_NO_TASK; | 4348 | t->timeout_task = GNUNET_SCHEDULER_NO_TASK; |