aboutsummaryrefslogtreecommitdiff
path: root/src/fs/gnunet-service-fs_cp.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-12-26 16:52:04 +0000
committerChristian Grothoff <christian@grothoff.org>2011-12-26 16:52:04 +0000
commit208eaf28f0a15033e1500373b0570918044e7c61 (patch)
tree5cae51f22d654678ea21f5efece9ce5b7a124e4f /src/fs/gnunet-service-fs_cp.c
parente123568297e33d8cbe7acd9023fa65d7f4a8a621 (diff)
downloadgnunet-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.c60
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 */
755static void
756free_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