From: Bart Polot Date: Wed, 27 Nov 2013 01:42:35 +0000 (+0000) Subject: - dont try to send data on connections that are going to be destroyed X-Git-Tag: initial-import-from-subversion-38251~5938 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5f2d097d94dfa3049f151eaeb69c6bb8ee0a75ff;p=oweals%2Fgnunet.git - dont try to send data on connections that are going to be destroyed --- diff --git a/src/mesh/gnunet-service-mesh_connection.c b/src/mesh/gnunet-service-mesh_connection.c index 31ba440e6..cc5a19c74 100644 --- 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 index 00b5e082b..44d205756 100644 --- 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, };