unsigned int i;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "disconnecting mesh service of peers, called from line %ld\n",
- line);
+ "disconnecting mesh service, called from line %ld\n", line);
disconnect_task = GNUNET_SCHEDULER_NO_TASK;
for (i = 0; i < TOTAL_PEERS; i++)
{
- GNUNET_TESTBED_operation_done (peers[i].op);
- GNUNET_MESH_channel_destroy (peers[i].ch);
+ if (NULL != peers[i].op)
+ GNUNET_TESTBED_operation_done (peers[i].op);
+
+ if (peers[i].up != GNUNET_YES)
+ continue;
+
+ if (NULL != peers[i].ch)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u: channel %p\n", i, peers[i].ch);
+ GNUNET_MESH_channel_destroy (peers[i].ch);
+ }
if (NULL != peers[i].incoming_ch)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u: incoming channel %p\n",
+ i, peers[i].incoming_ch);
GNUNET_MESH_channel_destroy (peers[i].incoming_ch);
+ }
}
GNUNET_MESH_TEST_cleanup (test_ctx);
if (GNUNET_SCHEDULER_NO_TASK != shutdown_handle)
if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
return;
- disconnect_task = GNUNET_SCHEDULER_NO_TASK;
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start collecting statistics...\n");
stats_op = GNUNET_TESTBED_get_statistics (TOTAL_PEERS, testbed_handles,
NULL, NULL,
} while (peers[r].up == run);
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "St%s peer %u: %s\n",
run ? "arting" : "opping", r, GNUNET_i2s (&peers[r].id));
- peers[r].up = GNUNET_NO;
+
+ if (GNUNET_SCHEDULER_NO_TASK != peers[r].ping_task)
+ GNUNET_SCHEDULER_cancel (peers[r].ping_task);
+ peers[r].ping_task = GNUNET_SCHEDULER_NO_TASK;
+
+ peers[r].up = run;
op = GNUNET_TESTBED_peer_manage_service (&peers[r], testbed_handles[r],
"mesh", NULL, NULL, run);
GNUNET_break (NULL != op);
+ peers_running += run ? 1 : -1;
+ GNUNET_assert (peers_running > 0);
}
}
peer = GNUNET_CONTAINER_multipeermap_get (ids, initiator);
GNUNET_assert (NULL != peer);
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u <= %u\n", n, get_index (peer));
+ GNUNET_assert (peer == peers[n].incoming);
+ GNUNET_assert (peer->dest == &peers[n]);
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u <= %u %p\n",
+ n, get_index (peer), channel);
peers[n].incoming_ch = channel;
- if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
- {
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
- &disconnect_mesh_peers,
- (void *) __LINE__);
- }
-
return NULL;
}
struct MeshPeer *peer = &peers[n];
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Incoming channel disconnected at peer %ld\n", n);
+ "Channel %p disconnected at peer %ld\n", channel, n);
if (peer->ch == channel)
peer->ch = NULL;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start profiler\n");
- if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
- &disconnect_mesh_peers,
- (void *) __LINE__);
-
flags = GNUNET_MESH_OPTION_DEFAULT;
for (i = 0; i < TOTAL_PEERS; i++)
{
peers[i].ch = GNUNET_MESH_channel_create (peers[i].mesh, NULL,
&peers[i].dest->id,
1, flags);
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u => %u\n",
- i, get_index (peers[i].dest));
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u => %u %p\n",
+ i, get_index (peers[i].dest), peers[i].ch);
peers[i].ping_task = GNUNET_SCHEDULER_add_delayed (delay_ms_rnd (2000),
&ping, &peers[i]);
}
GNUNET_break (GNUNET_OK ==
GNUNET_CONTAINER_multipeermap_put (ids, &peers[n].id, &peers[n],
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST));
+
+ GNUNET_TESTBED_operation_done (peers[n].op);
+ peers[n].op = NULL;
+
p_ids++;
if (p_ids < TOTAL_PEERS)
return;