diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-08-10 07:34:14 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-08-10 07:34:14 +0000 |
commit | 89731c0e26a6bbc224fd9b797a7aea6ad000cfe9 (patch) | |
tree | 441c565722e2fc99696c08c95c5d4153035a2fdc /src/testbed | |
parent | ff91f0ddeddab9f271fd652773c33f2a5af839ff (diff) | |
download | gnunet-89731c0e26a6bbc224fd9b797a7aea6ad000cfe9.tar.gz gnunet-89731c0e26a6bbc224fd9b797a7aea6ad000cfe9.zip |
cleaner peer destory
Diffstat (limited to 'src/testbed')
-rw-r--r-- | src/testbed/gnunet-service-testbed.c | 50 |
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 | */ | ||
684 | static void | ||
685 | peer_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); |