aboutsummaryrefslogtreecommitdiff
path: root/src/dht
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-04-30 09:11:25 +0000
committerChristian Grothoff <christian@grothoff.org>2015-04-30 09:11:25 +0000
commit1e2d6a79ff39e54c2a1a73432e26e02c77775726 (patch)
tree6e359da221ee5ce157b9309b92505ea929c32bac /src/dht
parent3393c742cb57c9b036853ca8b426ed3fdf2357fd (diff)
downloadgnunet-1e2d6a79ff39e54c2a1a73432e26e02c77775726.tar.gz
gnunet-1e2d6a79ff39e54c2a1a73432e26e02c77775726.zip
-fixing 'delete_trail()'
Diffstat (limited to 'src/dht')
-rw-r--r--src/dht/gnunet-service-wdht_neighbours.c145
1 files changed, 34 insertions, 111 deletions
diff --git a/src/dht/gnunet-service-wdht_neighbours.c b/src/dht/gnunet-service-wdht_neighbours.c
index 68b05d2eb..d9cee4196 100644
--- a/src/dht/gnunet-service-wdht_neighbours.c
+++ b/src/dht/gnunet-service-wdht_neighbours.c
@@ -623,126 +623,49 @@ delete_trail (struct Trail *trail,
623 struct FriendInfo *friend; 623 struct FriendInfo *friend;
624 struct GNUNET_MQ_Envelope *env; 624 struct GNUNET_MQ_Envelope *env;
625 struct TrailDestroyMessage *tdm; 625 struct TrailDestroyMessage *tdm;
626 struct Trail *current; 626 struct Finger *finger;
627
628 tdm = GNUNET_new(struct TrailDestroyMessage);
629 current = trail;
630 627
631 if (inform_pred) 628 friend = current->pred;
629 if (NULL != friend)
632 { 630 {
633 struct Trail *previous_pred; 631 if (GNUNET_YES == inform_pred)
634 struct Trail *next_pred;
635 tdm->trail_id = current->pred_id;
636 friend = current->pred;
637
638 while( NULL != current)
639 { 632 {
640 if (NULL != friend) 633 env = GNUNET_MQ_msg (tdm,
641 { 634 GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
642 env = GNUNET_MQ_msg (tdm, 635 tdm->trail_id = current->pred_id;
643 GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY); 636 GNUNET_MQ_send (friend->mq,
644 GNUNET_MQ_send (friend->mq, 637 env);
645 env);
646 }
647
648 next_pred = current->next_pred;
649 previous_pred = current->prev_pred;
650
651 /* Freeing current trail memory */
652 GNUNET_free(current);
653
654 /* Destroying the next successor list */
655 while(NULL != previous_pred)
656 {
657 struct Trail *tmp;
658 if (NULL != friend)
659 {
660 env = GNUNET_MQ_msg (tdm,
661 GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
662 GNUNET_MQ_send (friend->mq,
663 env);
664 }
665
666 tmp = next_pred;
667 next_pred = next_pred->next_pred;
668 GNUNET_free(tmp);
669 }
670
671 /* Destroying the next predecessor list */
672 while(NULL != next_pred)
673 {
674 struct Trail *tmp;
675 if (NULL != friend)
676 {
677 env = GNUNET_MQ_msg (tdm,
678 GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
679 GNUNET_MQ_send (friend->mq,
680 env);
681 }
682
683 tmp = next_pred;
684 next_pred = next_pred->next_pred;
685 GNUNET_free(tmp);
686 }
687 } 638 }
639 GNUNET_CONTAINER_MDLL_remove (pred,
640 friend->pred_head,
641 friend->pred_tail,
642 trail);
688 } 643 }
689 644 friend = current->succ;
690 if (inform_succ) 645 if (NULL != friend)
691 { 646 {
692 struct Trail *previous_succ; 647 if (GNUNET_YES == inform_succ)
693 struct Trail *next_succ;
694 tdm->trail_id = current->succ_id;
695 friend = current->succ;
696
697 while( NULL != current)
698 { 648 {
699 if (NULL != friend) 649 env = GNUNET_MQ_msg (tdm,
700 { 650 GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
701 env = GNUNET_MQ_msg (tdm, 651 tdm->trail_id = current->pred_id;
702 GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY); 652 GNUNET_MQ_send (friend->mq,
703 GNUNET_MQ_send (friend->mq, 653 env);
704 env);
705 }
706
707 next_succ = current->next_succ;
708 previous_succ = current->prev_succ;
709
710 /* Freeing current trail memory */
711 GNUNET_free(current);
712
713 /* Destroying the next successor list */
714 while(NULL != previous_succ)
715 {
716 struct Trail *tmp;
717 if (NULL != friend)
718 {
719 env = GNUNET_MQ_msg (tdm,
720 GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
721 GNUNET_MQ_send (friend->mq,
722 env);
723 }
724 tmp = next_succ;
725 previous_succ = previous_succ->prev_succ;
726 GNUNET_free(tmp);
727 }
728
729 /* Destroying the next successor list */
730 while(NULL != next_succ)
731 {
732 struct Trail *tmp;
733 if (NULL != friend)
734 {
735 env = GNUNET_MQ_msg (tdm,
736 GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
737 GNUNET_MQ_send (friend->mq,
738 env);
739 }
740 tmp = next_succ;
741 next_succ = next_succ->next_pred;
742 GNUNET_free(tmp);
743 }
744 } 654 }
655 GNUNET_CONTAINER_MDLL_remove (succ,
656 friend->pred_head,
657 friend->pred_tail,
658 trail);
659 }
660 GNUNET_break (trail ==
661 GNUNET_CONTAINER_heap_remove_node (trail->hn));
662 finger = *trail->finger;
663 if (NULL != finger)
664 {
665 *trail->finger = NULL;
666 GNUNET_free (finger);
745 } 667 }
668 GNUNET_free (trail);
746} 669}
747 670
748 671