aboutsummaryrefslogtreecommitdiff
path: root/src/mesh
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesh')
-rw-r--r--src/mesh/gnunet-service-mesh.c15
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
4337tunnel_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 4337tunnel_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;