diff options
author | Christian Grothoff <christian@grothoff.org> | 2015-04-30 09:11:25 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2015-04-30 09:11:25 +0000 |
commit | 1e2d6a79ff39e54c2a1a73432e26e02c77775726 (patch) | |
tree | 6e359da221ee5ce157b9309b92505ea929c32bac /src/dht | |
parent | 3393c742cb57c9b036853ca8b426ed3fdf2357fd (diff) | |
download | gnunet-1e2d6a79ff39e54c2a1a73432e26e02c77775726.tar.gz gnunet-1e2d6a79ff39e54c2a1a73432e26e02c77775726.zip |
-fixing 'delete_trail()'
Diffstat (limited to 'src/dht')
-rw-r--r-- | src/dht/gnunet-service-wdht_neighbours.c | 145 |
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 | ||