diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-12-26 16:52:04 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-12-26 16:52:04 +0000 |
commit | 208eaf28f0a15033e1500373b0570918044e7c61 (patch) | |
tree | 5cae51f22d654678ea21f5efece9ce5b7a124e4f /src/fs/gnunet-service-fs_cp.c | |
parent | e123568297e33d8cbe7acd9023fa65d7f4a8a621 (diff) | |
download | gnunet-208eaf28f0a15033e1500373b0570918044e7c61.tar.gz gnunet-208eaf28f0a15033e1500373b0570918044e7c61.zip |
-fixing #2036
Diffstat (limited to 'src/fs/gnunet-service-fs_cp.c')
-rw-r--r-- | src/fs/gnunet-service-fs_cp.c | 60 |
1 files changed, 29 insertions, 31 deletions
diff --git a/src/fs/gnunet-service-fs_cp.c b/src/fs/gnunet-service-fs_cp.c index 021780dcc..aa108c39a 100644 --- a/src/fs/gnunet-service-fs_cp.c +++ b/src/fs/gnunet-service-fs_cp.c | |||
@@ -747,6 +747,32 @@ copy_reply (void *cls, size_t buf_size, void *buf) | |||
747 | 747 | ||
748 | 748 | ||
749 | /** | 749 | /** |
750 | * Free resources associated with the given peer request. | ||
751 | * | ||
752 | * @param peerreq request to free | ||
753 | * @param query associated key for the request | ||
754 | */ | ||
755 | static void | ||
756 | free_pending_request (struct PeerRequest *peerreq, | ||
757 | const GNUNET_HashCode *query) | ||
758 | { | ||
759 | struct GSF_ConnectedPeer *cp = peerreq->cp; | ||
760 | |||
761 | if (peerreq->kill_task != GNUNET_SCHEDULER_NO_TASK) | ||
762 | { | ||
763 | GNUNET_SCHEDULER_cancel (peerreq->kill_task); | ||
764 | peerreq->kill_task = GNUNET_SCHEDULER_NO_TASK; | ||
765 | } | ||
766 | GNUNET_STATISTICS_update (GSF_stats, gettext_noop ("# P2P searches active"), | ||
767 | -1, GNUNET_NO); | ||
768 | GNUNET_break (GNUNET_YES == | ||
769 | GNUNET_CONTAINER_multihashmap_remove (cp->request_map, | ||
770 | query, peerreq)); | ||
771 | GNUNET_free (peerreq); | ||
772 | } | ||
773 | |||
774 | |||
775 | /** | ||
750 | * Cancel all requests associated with the peer. | 776 | * Cancel all requests associated with the peer. |
751 | * | 777 | * |
752 | * @param cls unused | 778 | * @param cls unused |
@@ -759,22 +785,11 @@ cancel_pending_request (void *cls, const GNUNET_HashCode * query, void *value) | |||
759 | { | 785 | { |
760 | struct PeerRequest *peerreq = value; | 786 | struct PeerRequest *peerreq = value; |
761 | struct GSF_PendingRequest *pr = peerreq->pr; | 787 | struct GSF_PendingRequest *pr = peerreq->pr; |
762 | struct GSF_ConnectedPeer *cp = peerreq->cp; | ||
763 | struct GSF_PendingRequestData *prd; | 788 | struct GSF_PendingRequestData *prd; |
764 | 789 | ||
765 | if (peerreq->kill_task != GNUNET_SCHEDULER_NO_TASK) | ||
766 | { | ||
767 | GNUNET_SCHEDULER_cancel (peerreq->kill_task); | ||
768 | peerreq->kill_task = GNUNET_SCHEDULER_NO_TASK; | ||
769 | } | ||
770 | GNUNET_STATISTICS_update (GSF_stats, gettext_noop ("# P2P searches active"), | ||
771 | -1, GNUNET_NO); | ||
772 | prd = GSF_pending_request_get_data_ (pr); | 790 | prd = GSF_pending_request_get_data_ (pr); |
773 | GNUNET_break (GNUNET_YES == | ||
774 | GNUNET_CONTAINER_multihashmap_remove (cp->request_map, | ||
775 | &prd->query, peerreq)); | ||
776 | GSF_pending_request_cancel_ (pr, GNUNET_NO); | 791 | GSF_pending_request_cancel_ (pr, GNUNET_NO); |
777 | GNUNET_free (peerreq); | 792 | free_pending_request (peerreq, &prd->query); |
778 | return GNUNET_OK; | 793 | return GNUNET_OK; |
779 | } | 794 | } |
780 | 795 | ||
@@ -883,12 +898,7 @@ handle_p2p_reply (void *cls, enum GNUNET_BLOCK_EvaluationResult eval, | |||
883 | prd = GSF_pending_request_get_data_ (pr); | 898 | prd = GSF_pending_request_get_data_ (pr); |
884 | if (NULL == data) | 899 | if (NULL == data) |
885 | { | 900 | { |
886 | GNUNET_STATISTICS_update (GSF_stats, gettext_noop ("# P2P searches active"), | 901 | free_pending_request (peerreq, &prd->query); |
887 | -1, GNUNET_NO); | ||
888 | GNUNET_break (GNUNET_YES == | ||
889 | GNUNET_CONTAINER_multihashmap_remove (cp->request_map, | ||
890 | &prd->query, peerreq)); | ||
891 | GNUNET_free (peerreq); | ||
892 | return; | 902 | return; |
893 | } | 903 | } |
894 | GNUNET_break (type != GNUNET_BLOCK_TYPE_ANY); | 904 | GNUNET_break (type != GNUNET_BLOCK_TYPE_ANY); |
@@ -1292,21 +1302,9 @@ GSF_handle_p2p_query_ (const struct GNUNET_PeerIdentity *other, | |||
1292 | return NULL; | 1302 | return NULL; |
1293 | } | 1303 | } |
1294 | /* existing request has lower TTL, drop old one! */ | 1304 | /* existing request has lower TTL, drop old one! */ |
1295 | GNUNET_STATISTICS_update (GSF_stats, | ||
1296 | gettext_noop ("# P2P searches active"), -1, | ||
1297 | GNUNET_NO); | ||
1298 | priority += prd->priority; | 1305 | priority += prd->priority; |
1299 | GSF_pending_request_cancel_ (pr, GNUNET_YES); | 1306 | GSF_pending_request_cancel_ (pr, GNUNET_YES); |
1300 | GNUNET_assert (GNUNET_YES == | 1307 | free_pending_request (peerreq, &gm->query); |
1301 | GNUNET_CONTAINER_multihashmap_remove (cp->request_map, | ||
1302 | &gm->query, | ||
1303 | peerreq)); | ||
1304 | if (peerreq->kill_task != GNUNET_SCHEDULER_NO_TASK) | ||
1305 | { | ||
1306 | GNUNET_SCHEDULER_cancel (peerreq->kill_task); | ||
1307 | peerreq->kill_task = GNUNET_SCHEDULER_NO_TASK; | ||
1308 | } | ||
1309 | GNUNET_free (peerreq); | ||
1310 | } | 1308 | } |
1311 | } | 1309 | } |
1312 | 1310 | ||