aboutsummaryrefslogtreecommitdiff
path: root/src/testbed
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-08-10 07:34:14 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-08-10 07:34:14 +0000
commit89731c0e26a6bbc224fd9b797a7aea6ad000cfe9 (patch)
tree441c565722e2fc99696c08c95c5d4153035a2fdc /src/testbed
parentff91f0ddeddab9f271fd652773c33f2a5af839ff (diff)
downloadgnunet-89731c0e26a6bbc224fd9b797a7aea6ad000cfe9.tar.gz
gnunet-89731c0e26a6bbc224fd9b797a7aea6ad000cfe9.zip
cleaner peer destory
Diffstat (limited to 'src/testbed')
-rw-r--r--src/testbed/gnunet-service-testbed.c50
1 files changed, 33 insertions, 17 deletions
diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c
index eeda71d33..1d8732902 100644
--- a/src/testbed/gnunet-service-testbed.c
+++ b/src/testbed/gnunet-service-testbed.c
@@ -677,6 +677,32 @@ peer_list_add (struct Peer *peer)
677 677
678 678
679/** 679/**
680 * Removes a the give peer from the peer array
681 *
682 * @param peer the peer to be removed
683 */
684static void
685peer_list_remove (struct Peer *peer)
686{
687 uint32_t id;
688
689 peer_list[peer->id] = NULL;
690 while (peer_list_size >= LIST_GROW_STEP)
691 {
692 for (id = peer_list_size - 1;
693 id > peer_list_size - LIST_GROW_STEP; id--)
694 if (NULL != peer_list[id])
695 break;
696 if (id != peer_list_size - LIST_GROW_STEP)
697 break;
698 peer_list_size -= LIST_GROW_STEP;
699 }
700 peer_list = GNUNET_realloc (peer_list, sizeof (struct GNUNET_TESTBED_Peer*)
701 * peer_list_size);
702}
703
704
705/**
680 * Routes message to a host given its host_id 706 * Routes message to a host given its host_id
681 * 707 *
682 * @param host_id the id of the destination host 708 * @param host_id the id of the destination host
@@ -1369,36 +1395,26 @@ handle_peer_destroy (void *cls,
1369{ 1395{
1370 const struct GNUNET_TESTBED_PeerDestroyMessage *msg; 1396 const struct GNUNET_TESTBED_PeerDestroyMessage *msg;
1371 struct GNUNET_TESTBED_GenericOperationSuccessEventMessage *reply; 1397 struct GNUNET_TESTBED_GenericOperationSuccessEventMessage *reply;
1398 struct Peer *peer;
1372 uint32_t peer_id; 1399 uint32_t peer_id;
1373 uint32_t id;
1374 uint16_t reply_size; 1400 uint16_t reply_size;
1375 1401
1376 msg = (const struct GNUNET_TESTBED_PeerDestroyMessage *) message; 1402 msg = (const struct GNUNET_TESTBED_PeerDestroyMessage *) message;
1377 peer_id = ntohl (msg->peer_id); 1403 peer_id = ntohl (msg->peer_id);
1378 LOG_DEBUG ("Received peer destory on peer: %u and operation id: %ul\n", 1404 LOG_DEBUG ("Received peer destory on peer: %u and operation id: %ul\n",
1379 peer_id, GNUNET_ntohll (msg->operation_id)); 1405 peer_id, GNUNET_ntohll (msg->operation_id));
1380 if ((peer_list_size <= peer_id) || (NULL == peer_list[peer_id])) 1406 if ((peer_list_size <= peer_id) || (NULL == peer_list[peer_id]))
1381 { 1407 {
1382 GNUNET_break (0); 1408 GNUNET_break (0);
1383 /* FIXME: Reply with failure event message or forward to slave controller */ 1409 /* FIXME: Reply with failure event message or forward to slave controller */
1384 GNUNET_SERVER_receive_done (client, GNUNET_OK); 1410 GNUNET_SERVER_receive_done (client, GNUNET_OK);
1385 return; 1411 return;
1386 }
1387 GNUNET_TESTING_peer_destroy (peer_list[peer_id]->peer);
1388 GNUNET_CONFIGURATION_destroy (peer_list[peer_id]->cfg);
1389 GNUNET_free (peer_list[peer_id]);
1390 peer_list[peer_id] = NULL;
1391 for (id = 0; id < LIST_GROW_STEP; id++)
1392 {
1393 if (((peer_id + id >= peer_list_size) ||
1394 (NULL != peer_list[peer_id])))
1395 break;
1396 }
1397 if (LIST_GROW_STEP == id)
1398 {
1399 peer_list_size -= LIST_GROW_STEP;
1400 peer_list = GNUNET_realloc (peer_list, peer_list_size);
1401 } 1412 }
1413 peer = peer_list[peer_id];
1414 GNUNET_TESTING_peer_destroy (peer->peer);
1415 GNUNET_CONFIGURATION_destroy (peer->cfg);
1416 peer_list_remove (peer);
1417 GNUNET_free (peer);
1402 reply_size = 1418 reply_size =
1403 sizeof (struct GNUNET_TESTBED_GenericOperationSuccessEventMessage); 1419 sizeof (struct GNUNET_TESTBED_GenericOperationSuccessEventMessage);
1404 reply = GNUNET_malloc (reply_size); 1420 reply = GNUNET_malloc (reply_size);