[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r22753 - gnunet/src/mesh
From: |
gnunet |
Subject: |
[GNUnet-SVN] r22753 - gnunet/src/mesh |
Date: |
Wed, 18 Jul 2012 16:58:15 +0200 |
Author: bartpolot
Date: 2012-07-18 16:58:15 +0200 (Wed, 18 Jul 2012)
New Revision: 22753
Modified:
gnunet/src/mesh/gnunet-service-mesh.c
Log:
- let tunnel empty queue before destroying
Modified: gnunet/src/mesh/gnunet-service-mesh.c
===================================================================
--- gnunet/src/mesh/gnunet-service-mesh.c 2012-07-18 14:13:30 UTC (rev
22752)
+++ gnunet/src/mesh/gnunet-service-mesh.c 2012-07-18 14:58:15 UTC (rev
22753)
@@ -328,14 +328,21 @@
/**
* How many messages are in the queue.
*/
- unsigned int queue_n;
+ unsigned int queue_n;
/**
* How many messages do we accept in the queue.
*/
- unsigned int queue_max;
+ unsigned int queue_max;
/**
+ * Flag to signal the destruction of the tunnel.
+ * If this is set GNUNET_YES the tunnel will be destroyed
+ * when the queue is empty.
+ */
+ int destroy;
+
+ /**
* Last time the tunnel was used
*/
struct GNUNET_TIME_Absolute timestamp;
@@ -3428,6 +3435,7 @@
{
struct MeshPeerInfo *peer = cls;
struct MeshPeerQueue *queue;
+ struct MeshTunnel *t;
size_t data_size;
peer->core_transmit = NULL;
@@ -3486,11 +3494,19 @@
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "********* type unknown\n");
data_size = 0;
}
- queue->tunnel->queue_n--;
+ t = queue->tunnel;
+ t->queue_n--;
+
/* Free queue, but cls was freed by send_core_* */
queue_destroy(queue, GNUNET_NO);
+ if (GNUNET_YES == t->destroy && 0 == t->queue_n)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "********* destroying tunnel!\n");
+ tunnel_destroy (t);
+ }
+
/* If more data in queue, send next */
if (NULL != peer->queue_head)
{
@@ -3911,7 +3927,8 @@
send_clients_tunnel_destroy (t);
}
tunnel_send_destroy (t);
- tunnel_destroy (t);
+ t->destroy = GNUNET_YES;
+ // TODO: add timeout to destroy the tunnel anyway
return GNUNET_OK;
}
@@ -5010,7 +5027,8 @@
/* Don't try to ACK the client about the tunnel_destroy multicast packet */
t->owner = NULL;
tunnel_send_destroy (t);
- tunnel_destroy (t);
+ t->destroy = GNUNET_YES;
+ // The tunnel will be destroyed when the last message is transmitted.
GNUNET_SERVER_receive_done (client, GNUNET_OK);
return;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r22753 - gnunet/src/mesh,
gnunet <=