diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-10-23 18:29:31 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-10-23 18:29:31 +0000 |
commit | a25686672d1ca40a856292ee65f45e0e736a7a8f (patch) | |
tree | 923b746e3f8af3b77d90536e5c936c4135c1b781 /src | |
parent | b38b47339b7c806432f251a566c857eb64c6e8cf (diff) | |
download | gnunet-a25686672d1ca40a856292ee65f45e0e736a7a8f.tar.gz gnunet-a25686672d1ca40a856292ee65f45e0e736a7a8f.zip |
-using new MDLL facility to clean up bijection data structure and reduce memory consumption in fs service
Diffstat (limited to 'src')
-rw-r--r-- | src/fs/gnunet-service-fs.h | 5 | ||||
-rw-r--r-- | src/fs/gnunet-service-fs_pe.c | 178 | ||||
-rw-r--r-- | src/fs/gnunet-service-fs_pe.h | 8 | ||||
-rw-r--r-- | src/fs/gnunet-service-fs_pr.c | 11 | ||||
-rw-r--r-- | src/fs/gnunet-service-fs_pr.h | 4 |
5 files changed, 91 insertions, 115 deletions
diff --git a/src/fs/gnunet-service-fs.h b/src/fs/gnunet-service-fs.h index 70e65186d..d198d864d 100644 --- a/src/fs/gnunet-service-fs.h +++ b/src/fs/gnunet-service-fs.h | |||
@@ -183,10 +183,9 @@ struct GSF_LocalClient; | |||
183 | struct GSF_RequestPlan; | 183 | struct GSF_RequestPlan; |
184 | 184 | ||
185 | /** | 185 | /** |
186 | * DLL of request plans a particular pending request is | 186 | * Bijection between request plans and pending requests. |
187 | * involved with. | ||
188 | */ | 187 | */ |
189 | struct GSF_RequestPlanReference; | 188 | struct GSF_PendingRequestPlanBijection; |
190 | 189 | ||
191 | /** | 190 | /** |
192 | * Our connection to the datastore. | 191 | * Our connection to the datastore. |
diff --git a/src/fs/gnunet-service-fs_pe.c b/src/fs/gnunet-service-fs_pe.c index 226137d73..0a5b7e4b2 100644 --- a/src/fs/gnunet-service-fs_pe.c +++ b/src/fs/gnunet-service-fs_pe.c | |||
@@ -47,73 +47,55 @@ struct PeerPlan; | |||
47 | 47 | ||
48 | 48 | ||
49 | /** | 49 | /** |
50 | * DLL of request plans a particular pending request is | 50 | * M:N binding of plans to pending requests. |
51 | * involved with. The corresponding head and tail are | 51 | * Each pending request can be in a number of plans, |
52 | * stored in a 'struct GSF_PendingRequest'. (We need | 52 | * and each plan can have a number of pending requests. |
53 | * to be able to lookup all 'plan' entries for a given | 53 | * Objects of this type indicate a mapping of a plan to |
54 | * request easily). | 54 | * a particular pending request. |
55 | * | 55 | * |
56 | * There is always one 'struct PendingRequestList' | 56 | * The corresponding head and tail of the "PE" MDLL |
57 | * for each 'struct GSF_RequestPlanReference'. | 57 | * are stored in a 'struct GSF_RequestPlan'. (We need |
58 | * to be able to lookup all pending requests corresponding | ||
59 | * to a given plan entry.) | ||
60 | * | ||
61 | * Similarly head and tail of the "PR" MDLL are stored | ||
62 | * with the 'struct GSF_PendingRequest'. (We need | ||
63 | * to be able to lookup all plan entries corresponding | ||
64 | * to a given pending request.) | ||
58 | */ | 65 | */ |
59 | struct GSF_RequestPlanReference | 66 | struct GSF_PendingRequestPlanBijection |
60 | { | 67 | { |
61 | 68 | ||
62 | /** | 69 | /** |
63 | * This is a doubly-linked list. | 70 | * This is a doubly-linked list. |
64 | */ | 71 | */ |
65 | struct GSF_RequestPlanReference *next_PR; | 72 | struct GSF_PendingRequestPlanBijection *next_PR; |
66 | 73 | ||
67 | /** | 74 | /** |
68 | * This is a doubly-linked list. | 75 | * This is a doubly-linked list. |
69 | */ | 76 | */ |
70 | struct GSF_RequestPlanReference *prev_PR; | 77 | struct GSF_PendingRequestPlanBijection *prev_PR; |
71 | 78 | ||
72 | /** | 79 | /** |
73 | * Associated request plan. | 80 | * This is a doubly-linked list. |
74 | */ | 81 | */ |
75 | struct GSF_RequestPlan *rp; | 82 | struct GSF_PendingRequestPlanBijection *next_PE; |
76 | |||
77 | /** | ||
78 | * Corresponding PendingRequestList. | ||
79 | */ | ||
80 | struct PendingRequestList *prl; | ||
81 | }; | ||
82 | |||
83 | |||
84 | /** | ||
85 | * List of GSF_PendingRequests this request plan | ||
86 | * participates with. The corresponding head and tail | ||
87 | * are stored in a 'struct GSF_RequestPlan'. (We need | ||
88 | * to be able to lookup all pending requests corresponding | ||
89 | * to a given plan entry.) | ||
90 | * | ||
91 | * There is always one 'struct PendingRequestList' | ||
92 | * for each 'struct GSF_RequestPlanReference'. | ||
93 | */ | ||
94 | struct PendingRequestList | ||
95 | { | ||
96 | 83 | ||
97 | /** | 84 | /** |
98 | * This is a doubly-linked list. | 85 | * This is a doubly-linked list. |
99 | */ | 86 | */ |
100 | struct PendingRequestList *next_PE; | 87 | struct GSF_PendingRequestPlanBijection *prev_PE; |
101 | 88 | ||
102 | /** | 89 | /** |
103 | * This is a doubly-linked list. | 90 | * Associated request plan. |
104 | */ | 91 | */ |
105 | struct PendingRequestList *prev_PE; | 92 | struct GSF_RequestPlan *rp; |
106 | 93 | ||
107 | /** | 94 | /** |
108 | * Associated pending request. | 95 | * Associated pending request. |
109 | */ | 96 | */ |
110 | struct GSF_PendingRequest *pr; | 97 | struct GSF_PendingRequest *pr; |
111 | 98 | ||
112 | /** | ||
113 | * Corresponding GSF_RequestPlanReference. | ||
114 | */ | ||
115 | struct GSF_RequestPlanReference *rpr; | ||
116 | |||
117 | }; | 99 | }; |
118 | 100 | ||
119 | 101 | ||
@@ -149,12 +131,12 @@ struct GSF_RequestPlan | |||
149 | /** | 131 | /** |
150 | * Head of list of associated pending requests. | 132 | * Head of list of associated pending requests. |
151 | */ | 133 | */ |
152 | struct PendingRequestList *prl_head; | 134 | struct GSF_PendingRequestPlanBijection *pe_head; |
153 | 135 | ||
154 | /** | 136 | /** |
155 | * Tail of list of associated pending requests. | 137 | * Tail of list of associated pending requests. |
156 | */ | 138 | */ |
157 | struct PendingRequestList *prl_tail; | 139 | struct GSF_PendingRequestPlanBijection *pe_tail; |
158 | 140 | ||
159 | /** | 141 | /** |
160 | * Earliest time we'd be happy to (re)transmit this request. | 142 | * Earliest time we'd be happy to (re)transmit this request. |
@@ -249,7 +231,7 @@ static unsigned long long plan_count; | |||
249 | static const struct GNUNET_HashCode * | 231 | static const struct GNUNET_HashCode * |
250 | get_rp_key (struct GSF_RequestPlan *rp) | 232 | get_rp_key (struct GSF_RequestPlan *rp) |
251 | { | 233 | { |
252 | return &GSF_pending_request_get_data_ (rp->prl_head->pr)->query; | 234 | return &GSF_pending_request_get_data_ (rp->pe_head->pr)->query; |
253 | } | 235 | } |
254 | 236 | ||
255 | 237 | ||
@@ -286,7 +268,7 @@ plan (struct PeerPlan *pp, struct GSF_RequestPlan *rp) | |||
286 | GNUNET_STATISTICS_set (GSF_stats, | 268 | GNUNET_STATISTICS_set (GSF_stats, |
287 | gettext_noop ("# average retransmission delay (ms)"), | 269 | gettext_noop ("# average retransmission delay (ms)"), |
288 | total_delay * 1000LL / plan_count, GNUNET_NO); | 270 | total_delay * 1000LL / plan_count, GNUNET_NO); |
289 | prd = GSF_pending_request_get_data_ (rp->prl_head->pr); | 271 | prd = GSF_pending_request_get_data_ (rp->pe_head->pr); |
290 | 272 | ||
291 | if (rp->transmission_counter < 8) | 273 | if (rp->transmission_counter < 8) |
292 | delay = | 274 | delay = |
@@ -372,17 +354,19 @@ struct GSF_PendingRequest * | |||
372 | get_latest (const struct GSF_RequestPlan *rp) | 354 | get_latest (const struct GSF_RequestPlan *rp) |
373 | { | 355 | { |
374 | struct GSF_PendingRequest *ret; | 356 | struct GSF_PendingRequest *ret; |
375 | struct PendingRequestList *prl; | 357 | struct GSF_PendingRequestPlanBijection *bi; |
376 | 358 | ||
377 | prl = rp->prl_head; | 359 | bi = rp->pe_head; |
378 | ret = prl->pr; | 360 | if (NULL == bi) |
379 | prl = prl->next_PE; | 361 | return NULL; /* should never happen */ |
380 | while (NULL != prl) | 362 | ret = bi->pr; |
363 | bi = bi->next_PE; | ||
364 | while (NULL != bi) | ||
381 | { | 365 | { |
382 | if (GSF_pending_request_get_data_ (prl->pr)->ttl.abs_value > | 366 | if (GSF_pending_request_get_data_ (bi->pr)->ttl.abs_value > |
383 | GSF_pending_request_get_data_ (ret)->ttl.abs_value) | 367 | GSF_pending_request_get_data_ (ret)->ttl.abs_value) |
384 | ret = prl->pr; | 368 | ret = bi->pr; |
385 | prl = prl->next_PE; | 369 | bi = bi->next_PE; |
386 | } | 370 | } |
387 | return ret; | 371 | return ret; |
388 | } | 372 | } |
@@ -541,23 +525,19 @@ merge_pr (void *cls, const struct GNUNET_HashCode * query, void *element) | |||
541 | struct MergeContext *mpr = cls; | 525 | struct MergeContext *mpr = cls; |
542 | struct GSF_RequestPlan *rp = element; | 526 | struct GSF_RequestPlan *rp = element; |
543 | struct GSF_PendingRequestData *prd; | 527 | struct GSF_PendingRequestData *prd; |
544 | struct GSF_RequestPlanReference *rpr; | 528 | struct GSF_PendingRequestPlanBijection *bi; |
545 | struct PendingRequestList *prl; | ||
546 | struct GSF_PendingRequest *latest; | 529 | struct GSF_PendingRequest *latest; |
547 | 530 | ||
548 | if (GNUNET_OK != | 531 | if (GNUNET_OK != |
549 | GSF_pending_request_is_compatible_ (mpr->pr, rp->prl_head->pr)) | 532 | GSF_pending_request_is_compatible_ (mpr->pr, rp->pe_head->pr)) |
550 | return GNUNET_YES; | 533 | return GNUNET_YES; |
551 | /* merge new request with existing request plan */ | 534 | /* merge new request with existing request plan */ |
552 | rpr = GNUNET_malloc (sizeof (struct GSF_RequestPlanReference)); | 535 | bi = GNUNET_malloc (sizeof (struct GSF_PendingRequestPlanBijection)); |
553 | prl = GNUNET_malloc (sizeof (struct PendingRequestList)); | 536 | bi->rp = rp; |
554 | rpr->rp = rp; | 537 | bi->pr = mpr->pr; |
555 | rpr->prl = prl; | ||
556 | prl->rpr = rpr; | ||
557 | prl->pr = mpr->pr; | ||
558 | prd = GSF_pending_request_get_data_ (mpr->pr); | 538 | prd = GSF_pending_request_get_data_ (mpr->pr); |
559 | GNUNET_CONTAINER_MDLL_insert (PR, prd->rpr_head, prd->rpr_tail, rpr); | 539 | GNUNET_CONTAINER_MDLL_insert (PR, prd->pr_head, prd->pr_tail, bi); |
560 | GNUNET_CONTAINER_MDLL_insert (PE, rp->prl_head, rp->prl_tail, prl); | 540 | GNUNET_CONTAINER_MDLL_insert (PE, rp->pe_head, rp->pe_tail, bi); |
561 | mpr->merged = GNUNET_YES; | 541 | mpr->merged = GNUNET_YES; |
562 | #if INSANE_STATISTICS | 542 | #if INSANE_STATISTICS |
563 | GNUNET_STATISTICS_update (GSF_stats, gettext_noop ("# requests merged"), 1, | 543 | GNUNET_STATISTICS_update (GSF_stats, gettext_noop ("# requests merged"), 1, |
@@ -590,8 +570,7 @@ GSF_plan_add_ (struct GSF_ConnectedPeer *cp, struct GSF_PendingRequest *pr) | |||
590 | struct PeerPlan *pp; | 570 | struct PeerPlan *pp; |
591 | struct GSF_PendingRequestData *prd; | 571 | struct GSF_PendingRequestData *prd; |
592 | struct GSF_RequestPlan *rp; | 572 | struct GSF_RequestPlan *rp; |
593 | struct GSF_RequestPlanReference *rpr; | 573 | struct GSF_PendingRequestPlanBijection *bi; |
594 | struct PendingRequestList *prl; | ||
595 | struct MergeContext mpc; | 574 | struct MergeContext mpc; |
596 | 575 | ||
597 | GNUNET_assert (NULL != cp); | 576 | GNUNET_assert (NULL != cp); |
@@ -630,14 +609,11 @@ GSF_plan_add_ (struct GSF_ConnectedPeer *cp, struct GSF_PendingRequest *pr) | |||
630 | "Planning transmission of query `%s' to peer `%s'\n", | 609 | "Planning transmission of query `%s' to peer `%s'\n", |
631 | GNUNET_h2s (&prd->query), GNUNET_i2s (id)); | 610 | GNUNET_h2s (&prd->query), GNUNET_i2s (id)); |
632 | rp = GNUNET_malloc (sizeof (struct GSF_RequestPlan)); // 8 MB | 611 | rp = GNUNET_malloc (sizeof (struct GSF_RequestPlan)); // 8 MB |
633 | rpr = GNUNET_malloc (sizeof (struct GSF_RequestPlanReference)); | 612 | bi = GNUNET_malloc (sizeof (struct GSF_PendingRequestPlanBijection)); |
634 | prl = GNUNET_malloc (sizeof (struct PendingRequestList)); | 613 | bi->rp = rp; |
635 | rpr->rp = rp; | 614 | bi->pr = pr; |
636 | rpr->prl = prl; | 615 | GNUNET_CONTAINER_MDLL_insert (PR, prd->pr_head, prd->pr_tail, bi); |
637 | prl->rpr = rpr; | 616 | GNUNET_CONTAINER_MDLL_insert (PE, rp->pe_head, rp->pe_tail, bi); |
638 | prl->pr = pr; | ||
639 | GNUNET_CONTAINER_MDLL_insert (PR, prd->rpr_head, prd->rpr_tail, rpr); | ||
640 | GNUNET_CONTAINER_MDLL_insert (PE, rp->prl_head, rp->prl_tail, prl); | ||
641 | rp->pp = pp; | 617 | rp->pp = pp; |
642 | GNUNET_assert (GNUNET_YES == | 618 | GNUNET_assert (GNUNET_YES == |
643 | GNUNET_CONTAINER_multihashmap_put (pp->plan_map, | 619 | GNUNET_CONTAINER_multihashmap_put (pp->plan_map, |
@@ -660,7 +636,7 @@ GSF_plan_notify_peer_disconnect_ (const struct GSF_ConnectedPeer *cp) | |||
660 | struct PeerPlan *pp; | 636 | struct PeerPlan *pp; |
661 | struct GSF_RequestPlan *rp; | 637 | struct GSF_RequestPlan *rp; |
662 | struct GSF_PendingRequestData *prd; | 638 | struct GSF_PendingRequestData *prd; |
663 | struct PendingRequestList *prl; | 639 | struct GSF_PendingRequestPlanBijection *bi; |
664 | 640 | ||
665 | id = GSF_connected_peer_get_identity2_ (cp); | 641 | id = GSF_connected_peer_get_identity2_ (cp); |
666 | pp = GNUNET_CONTAINER_multihashmap_get (plans, &id->hashPubKey); | 642 | pp = GNUNET_CONTAINER_multihashmap_get (plans, &id->hashPubKey); |
@@ -684,13 +660,12 @@ GSF_plan_notify_peer_disconnect_ (const struct GSF_ConnectedPeer *cp) | |||
684 | GNUNET_break (GNUNET_YES == | 660 | GNUNET_break (GNUNET_YES == |
685 | GNUNET_CONTAINER_multihashmap_remove (pp->plan_map, | 661 | GNUNET_CONTAINER_multihashmap_remove (pp->plan_map, |
686 | get_rp_key (rp), rp)); | 662 | get_rp_key (rp), rp)); |
687 | while (NULL != (prl = rp->prl_head)) | 663 | while (NULL != (bi = rp->pe_head)) |
688 | { | 664 | { |
689 | GNUNET_CONTAINER_MDLL_remove (PE, rp->prl_head, rp->prl_tail, prl); | 665 | GNUNET_CONTAINER_MDLL_remove (PE, rp->pe_head, rp->pe_tail, bi); |
690 | prd = GSF_pending_request_get_data_ (prl->pr); | 666 | prd = GSF_pending_request_get_data_ (bi->pr); |
691 | GNUNET_CONTAINER_MDLL_remove (PR, prd->rpr_head, prd->rpr_tail, prl->rpr); | 667 | GNUNET_CONTAINER_MDLL_remove (PR, prd->pr_head, prd->pr_tail, bi); |
692 | GNUNET_free (prl->rpr); | 668 | GNUNET_free (bi); |
693 | GNUNET_free (prl); | ||
694 | } | 669 | } |
695 | plan_count--; | 670 | plan_count--; |
696 | GNUNET_free (rp); | 671 | GNUNET_free (rp); |
@@ -701,13 +676,11 @@ GSF_plan_notify_peer_disconnect_ (const struct GSF_ConnectedPeer *cp) | |||
701 | GNUNET_break (GNUNET_YES == | 676 | GNUNET_break (GNUNET_YES == |
702 | GNUNET_CONTAINER_multihashmap_remove (pp->plan_map, | 677 | GNUNET_CONTAINER_multihashmap_remove (pp->plan_map, |
703 | get_rp_key (rp), rp)); | 678 | get_rp_key (rp), rp)); |
704 | while (NULL != (prl = rp->prl_head)) | 679 | while (NULL != (bi = rp->pe_head)) |
705 | { | 680 | { |
706 | GNUNET_CONTAINER_MDLL_remove (PE, rp->prl_head, rp->prl_tail, prl); | 681 | GNUNET_CONTAINER_MDLL_remove (PE, rp->pe_head, rp->pe_tail, bi); |
707 | prd = GSF_pending_request_get_data_ (prl->pr); | 682 | GNUNET_CONTAINER_MDLL_remove (PR, prd->pr_head, prd->pr_tail, bi); |
708 | GNUNET_CONTAINER_MDLL_remove (PR, prd->rpr_head, prd->rpr_tail, prl->rpr); | 683 | GNUNET_free (bi); |
709 | GNUNET_free (prl->rpr); | ||
710 | GNUNET_free (prl); | ||
711 | } | 684 | } |
712 | plan_count--; | 685 | plan_count--; |
713 | GNUNET_free (rp); | 686 | GNUNET_free (rp); |
@@ -722,25 +695,25 @@ GSF_plan_notify_peer_disconnect_ (const struct GSF_ConnectedPeer *cp) | |||
722 | 695 | ||
723 | /** | 696 | /** |
724 | * Get the last transmission attempt time for the request plan list | 697 | * Get the last transmission attempt time for the request plan list |
725 | * referenced by 'rpr_head', that was sent to 'sender' | 698 | * referenced by 'pr_head', that was sent to 'sender' |
726 | * | 699 | * |
727 | * @param rpr_head request plan reference list to check. | 700 | * @param pr_head request plan reference list to check. |
728 | * @param sender the peer that we've sent the request to. | 701 | * @param sender the peer that we've sent the request to. |
729 | * @param result the timestamp to fill. | 702 | * @param result the timestamp to fill. |
730 | * @return GNUNET_YES if 'result' was changed, GNUNET_NO otherwise. | 703 | * @return GNUNET_YES if 'result' was changed, GNUNET_NO otherwise. |
731 | */ | 704 | */ |
732 | int | 705 | int |
733 | GSF_request_plan_reference_get_last_transmission_ ( | 706 | GSF_request_plan_reference_get_last_transmission_ ( |
734 | struct GSF_RequestPlanReference *rpr_head, struct GSF_ConnectedPeer *sender, | 707 | struct GSF_PendingRequestPlanBijection *pr_head, struct GSF_ConnectedPeer *sender, |
735 | struct GNUNET_TIME_Absolute *result) | 708 | struct GNUNET_TIME_Absolute *result) |
736 | { | 709 | { |
737 | struct GSF_RequestPlanReference *rpr; | 710 | struct GSF_PendingRequestPlanBijection *bi; |
738 | 711 | ||
739 | for (rpr = rpr_head; NULL != rpr; rpr = rpr->next_PR) | 712 | for (bi = pr_head; NULL != bi; bi = bi->next_PR) |
740 | { | 713 | { |
741 | if (rpr->rp->pp->cp == sender) | 714 | if (bi->rp->pp->cp == sender) |
742 | { | 715 | { |
743 | *result = rpr->rp->last_transmission; | 716 | *result = bi->rp->last_transmission; |
744 | return GNUNET_YES; | 717 | return GNUNET_YES; |
745 | } | 718 | } |
746 | } | 719 | } |
@@ -759,27 +732,26 @@ GSF_plan_notify_request_done_ (struct GSF_PendingRequest *pr) | |||
759 | { | 732 | { |
760 | struct GSF_RequestPlan *rp; | 733 | struct GSF_RequestPlan *rp; |
761 | struct GSF_PendingRequestData *prd; | 734 | struct GSF_PendingRequestData *prd; |
762 | struct GSF_RequestPlanReference *rpr; | 735 | struct GSF_PendingRequestPlanBijection *bi; |
763 | 736 | ||
764 | prd = GSF_pending_request_get_data_ (pr); | 737 | prd = GSF_pending_request_get_data_ (pr); |
765 | while (NULL != (rpr = prd->rpr_head)) | 738 | while (NULL != (bi = prd->pr_head)) |
766 | { | 739 | { |
767 | GNUNET_CONTAINER_MDLL_remove (PR, prd->rpr_head, prd->rpr_tail, rpr); | 740 | GNUNET_CONTAINER_MDLL_remove (PR, prd->pr_head, prd->pr_tail, bi); |
768 | rp = rpr->rp; | 741 | GNUNET_CONTAINER_MDLL_remove (PE, rp->pe_head, rp->pe_tail, bi); |
769 | GNUNET_CONTAINER_MDLL_remove (PE, rp->prl_head, rp->prl_tail, rpr->prl); | 742 | rp = bi->rp; |
770 | if (NULL == rp->prl_head) | 743 | if (NULL == rp->pe_head) |
771 | { | 744 | { |
772 | GNUNET_CONTAINER_heap_remove_node (rp->hn); | 745 | GNUNET_CONTAINER_heap_remove_node (rp->hn); |
773 | plan_count--; | 746 | plan_count--; |
774 | GNUNET_break (GNUNET_YES == | 747 | GNUNET_break (GNUNET_YES == |
775 | GNUNET_CONTAINER_multihashmap_remove (rp->pp->plan_map, | 748 | GNUNET_CONTAINER_multihashmap_remove (rp->pp->plan_map, |
776 | &GSF_pending_request_get_data_ | 749 | &GSF_pending_request_get_data_ |
777 | (rpr->prl->pr)->query, | 750 | (bi->pr)->query, |
778 | rp)); | 751 | rp)); |
779 | GNUNET_free (rp); | 752 | GNUNET_free (rp); |
780 | } | 753 | } |
781 | GNUNET_free (rpr->prl); | 754 | GNUNET_free (bi); |
782 | GNUNET_free (rpr); | ||
783 | } | 755 | } |
784 | GNUNET_STATISTICS_set (GSF_stats, gettext_noop ("# query plan entries"), | 756 | GNUNET_STATISTICS_set (GSF_stats, gettext_noop ("# query plan entries"), |
785 | plan_count, GNUNET_NO); | 757 | plan_count, GNUNET_NO); |
diff --git a/src/fs/gnunet-service-fs_pe.h b/src/fs/gnunet-service-fs_pe.h index 3a18715ca..d1362675c 100644 --- a/src/fs/gnunet-service-fs_pe.h +++ b/src/fs/gnunet-service-fs_pe.h | |||
@@ -62,15 +62,15 @@ GSF_plan_notify_request_done_ (struct GSF_PendingRequest *pr); | |||
62 | * Get the last transmission attempt time for the request plan list | 62 | * Get the last transmission attempt time for the request plan list |
63 | * referenced by 'rpr_head', that was sent to 'sender' | 63 | * referenced by 'rpr_head', that was sent to 'sender' |
64 | * | 64 | * |
65 | * @param rpr_head request plan reference list to check. | 65 | * @param pr_head request plan reference list to check. |
66 | * @param sender the peer that we've sent the request to. | 66 | * @param sender the peer that we've sent the request to. |
67 | * @param result the timestamp to fill. | 67 | * @param result the timestamp to fill. |
68 | * @return GNUNET_YES if 'result' was changed, GNUNET_NO otherwise. | 68 | * @return GNUNET_YES if 'result' was changed, GNUNET_NO otherwise. |
69 | */ | 69 | */ |
70 | int | 70 | int |
71 | GSF_request_plan_reference_get_last_transmission_ ( | 71 | GSF_request_plan_reference_get_last_transmission_ (struct GSF_PendingRequestPlanBijection *pr_head, |
72 | struct GSF_RequestPlanReference *rpr_head, struct GSF_ConnectedPeer *sender, | 72 | struct GSF_ConnectedPeer *sender, |
73 | struct GNUNET_TIME_Absolute *result); | 73 | struct GNUNET_TIME_Absolute *result); |
74 | 74 | ||
75 | /** | 75 | /** |
76 | * Initialize plan subsystem. | 76 | * Initialize plan subsystem. |
diff --git a/src/fs/gnunet-service-fs_pr.c b/src/fs/gnunet-service-fs_pr.c index f39f3fb78..74a982970 100644 --- a/src/fs/gnunet-service-fs_pr.c +++ b/src/fs/gnunet-service-fs_pr.c | |||
@@ -819,7 +819,9 @@ process_reply (void *cls, const struct GNUNET_HashCode * key, void *value) | |||
819 | GNUNET_LOAD_update (GSF_rt_entry_lifetime, | 819 | GNUNET_LOAD_update (GSF_rt_entry_lifetime, |
820 | GNUNET_TIME_absolute_get_duration (pr-> | 820 | GNUNET_TIME_absolute_get_duration (pr-> |
821 | public_data.start_time).rel_value); | 821 | public_data.start_time).rel_value); |
822 | if (!GSF_request_plan_reference_get_last_transmission_ (pr->public_data.rpr_head, prq->sender, &last_transmission)) | 822 | if (! GSF_request_plan_reference_get_last_transmission_ (pr->public_data.pr_head, |
823 | prq->sender, | ||
824 | &last_transmission)) | ||
823 | last_transmission.abs_value = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value; | 825 | last_transmission.abs_value = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value; |
824 | /* pass on to other peers / local clients */ | 826 | /* pass on to other peers / local clients */ |
825 | pr->rh (pr->rh_cls, prq->eval, pr, prq->anonymity_level, prq->expiration, | 827 | pr->rh (pr->rh_cls, prq->eval, pr, prq->anonymity_level, prq->expiration, |
@@ -870,9 +872,12 @@ process_reply (void *cls, const struct GNUNET_HashCode * key, void *value) | |||
870 | pr->public_data.results_found++; | 872 | pr->public_data.results_found++; |
871 | prq->request_found = GNUNET_YES; | 873 | prq->request_found = GNUNET_YES; |
872 | /* finally, pass on to other peer / local client */ | 874 | /* finally, pass on to other peer / local client */ |
873 | if (!GSF_request_plan_reference_get_last_transmission_ (pr->public_data.rpr_head, prq->sender, &last_transmission)) | 875 | if (! GSF_request_plan_reference_get_last_transmission_ (pr->public_data.pr_head, |
876 | prq->sender, | ||
877 | &last_transmission)) | ||
874 | last_transmission.abs_value = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value; | 878 | last_transmission.abs_value = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value; |
875 | pr->rh (pr->rh_cls, prq->eval, pr, prq->anonymity_level, prq->expiration, | 879 | pr->rh (pr->rh_cls, prq->eval, pr, |
880 | prq->anonymity_level, prq->expiration, | ||
876 | last_transmission, prq->type, prq->data, prq->size); | 881 | last_transmission, prq->type, prq->data, prq->size); |
877 | return GNUNET_YES; | 882 | return GNUNET_YES; |
878 | } | 883 | } |
diff --git a/src/fs/gnunet-service-fs_pr.h b/src/fs/gnunet-service-fs_pr.h index 2a5fed29d..ab5ce0fab 100644 --- a/src/fs/gnunet-service-fs_pr.h +++ b/src/fs/gnunet-service-fs_pr.h | |||
@@ -102,12 +102,12 @@ struct GSF_PendingRequestData | |||
102 | /** | 102 | /** |
103 | * Fields for the plan module to track a DLL with the request. | 103 | * Fields for the plan module to track a DLL with the request. |
104 | */ | 104 | */ |
105 | struct GSF_RequestPlanReference *rpr_head; | 105 | struct GSF_PendingRequestPlanBijection *pr_head; |
106 | 106 | ||
107 | /** | 107 | /** |
108 | * Fields for the plan module to track a DLL with the request. | 108 | * Fields for the plan module to track a DLL with the request. |
109 | */ | 109 | */ |
110 | struct GSF_RequestPlanReference *rpr_tail; | 110 | struct GSF_PendingRequestPlanBijection *pr_tail; |
111 | 111 | ||
112 | /** | 112 | /** |
113 | * Current TTL for the request. | 113 | * Current TTL for the request. |