commit 5f2d097d94dfa3049f151eaeb69c6bb8ee0a75ff
parent 5fbb57dd6719f3672c8b63e2985002c6fa0f6ccd
Author: Bart Polot <bart@net.in.tum.de>
Date: Wed, 27 Nov 2013 01:42:35 +0000
- dont try to send data on connections that are going to be destroyed
Diffstat:
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/src/mesh/gnunet-service-mesh_connection.c b/src/mesh/gnunet-service-mesh_connection.c
@@ -334,6 +334,8 @@ GMC_state2s (enum MeshConnectionState s)
return "MESH_CONNECTION_ACK";
case MESH_CONNECTION_READY:
return "MESH_CONNECTION_READY";
+ case MESH_CONNECTION_DESTROYED:
+ return "MESH_CONNECTION_DESTROYED";
default:
return "MESH_CONNECTION_STATE_ERROR";
}
@@ -379,6 +381,11 @@ connection_change_state (struct MeshConnection* c,
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Connection %s state was %s\n",
GMC_2s (c), GMC_state2s (c->state));
+ if (MESH_CONNECTION_DESTROYED == c->state)
+ {
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "state not changing anymore\n");
+ return;
+ }
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Connection %s state is now %s\n",
GMC_2s (c), GMC_state2s (state));
@@ -1520,6 +1527,7 @@ GMC_handle_destroy (void *cls, const struct GNUNET_PeerIdentity *peer,
}
GMC_send_prebuilt_message (message, c, fwd, NULL, NULL);
c->destroy = GNUNET_YES;
+ c->state = MESH_CONNECTION_DESTROYED;
return GNUNET_OK;
}
@@ -2399,6 +2407,7 @@ GMC_notify_broken (struct MeshConnection *c,
* (the one we just scheduled), so no point in checking whether to
* destroy immediately. */
c->destroy = GNUNET_YES;
+ c->state = MESH_CONNECTION_DESTROYED;
/**
* Cancel all queues, if no message is left, connection will be destroyed.
@@ -2691,6 +2700,7 @@ GMC_send_destroy (struct MeshConnection *c)
if (GNUNET_NO == GMC_is_terminal (c, GNUNET_NO))
GMC_send_prebuilt_message (&msg.header, c, GNUNET_NO, NULL, NULL);
c->destroy = GNUNET_YES;
+ c->state = MESH_CONNECTION_DESTROYED;
}
diff --git a/src/mesh/gnunet-service-mesh_connection.h b/src/mesh/gnunet-service-mesh_connection.h
@@ -64,6 +64,11 @@ enum MeshConnectionState
* Connection confirmed, ready to carry traffic.
*/
MESH_CONNECTION_READY,
+
+ /**
+ * Connection to be destroyed, just waiting to empty queues.
+ */
+ MESH_CONNECTION_DESTROYED,
};