X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmesh%2Fgnunet-service-mesh.c;h=7ebe7d199d188696f36268b002a872fa3a1b1ae1;hb=b552dea05cbfacacf1c65c6eb1f54220f4e4beb5;hp=7a04302b062916844df730dc9055c590131117b2;hpb=3df4580f2e7b43741a8c3bf3021770e634064deb;p=oweals%2Fgnunet.git diff --git a/src/mesh/gnunet-service-mesh.c b/src/mesh/gnunet-service-mesh.c index 7a04302b0..7ebe7d199 100644 --- a/src/mesh/gnunet-service-mesh.c +++ b/src/mesh/gnunet-service-mesh.c @@ -4585,10 +4585,12 @@ queue_destroy (struct MeshPeerQueue *queue, int clear_cls) { case GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY: GNUNET_log (GNUNET_ERROR_TYPE_ERROR, " cancelling TUNNEL_DESTROY\n"); + /* fall through */ case GNUNET_MESSAGE_TYPE_MESH_UNICAST: case GNUNET_MESSAGE_TYPE_MESH_MULTICAST: case GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN: - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " type payload\n"); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + " type prebuilt (payload, tunnel destroy)\n"); dd = queue->cls; data_descriptor_decrement_rc (dd->mesh_data); break; @@ -4624,13 +4626,15 @@ queue_destroy (struct MeshPeerQueue *queue, int clear_cls) unsigned int j2; unsigned int j3; - for (j = i; j < cinfo->send_buffer_n - 1; j++) + for (j = i, j2 = 0, j3 = 0; j < cinfo->send_buffer_n - 1; j++) { j2 = (cinfo->send_buffer_start + j) % max; j3 = (cinfo->send_buffer_start + j + 1) % max; cinfo->send_buffer[j2] = cinfo->send_buffer[j3]; } + cinfo->send_buffer[j3] = NULL; + cinfo->send_buffer_n--; } } @@ -7772,6 +7776,11 @@ core_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) queue_destroy(q, GNUNET_YES); q = n; } + if (NULL != pi->core_transmit) + { + GNUNET_CORE_notify_transmit_ready_cancel(pi->core_transmit); + pi->core_transmit = NULL; + } peer_info_remove_path (pi, pi->id, myid); if (myid == pi->id) {