aboutsummaryrefslogtreecommitdiff
path: root/src/fs
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-11-29 17:22:08 +0000
committerChristian Grothoff <christian@grothoff.org>2013-11-29 17:22:08 +0000
commit7d77825b6694b3d17537b5cc4ce74c1e365764c2 (patch)
treedd2c81d5758123f98539c0bcc6879f7bbaabb861 /src/fs
parentd4e9b7dbffef5f63864b6366133d86195e9450e7 (diff)
downloadgnunet-7d77825b6694b3d17537b5cc4ce74c1e365764c2.tar.gz
gnunet-7d77825b6694b3d17537b5cc4ce74c1e365764c2.zip
-fix #3133
Diffstat (limited to 'src/fs')
-rw-r--r--src/fs/gnunet-service-fs_mesh_client.c16
-rw-r--r--src/fs/gnunet-service-fs_pr.c24
2 files changed, 23 insertions, 17 deletions
diff --git a/src/fs/gnunet-service-fs_mesh_client.c b/src/fs/gnunet-service-fs_mesh_client.c
index 97a2fa36e..7bf6fb115 100644
--- a/src/fs/gnunet-service-fs_mesh_client.c
+++ b/src/fs/gnunet-service-fs_mesh_client.c
@@ -368,7 +368,7 @@ transmit_pending (struct MeshHandle *mh)
368 368
369 369
370/** 370/**
371 * Closure for 'handle_reply'. 371 * Closure for handle_reply().
372 */ 372 */
373struct HandleReplyClosure 373struct HandleReplyClosure
374{ 374{
@@ -677,6 +677,14 @@ cleaner_cb (void *cls,
677 mh->channel = NULL; 677 mh->channel = NULL;
678 while (NULL != (sr = mh->pending_head)) 678 while (NULL != (sr = mh->pending_head))
679 GSF_mesh_query_cancel (sr); 679 GSF_mesh_query_cancel (sr);
680 /* first remove `mh` from the `mesh_map`, so that if the
681 callback from `free_waiting_entry()` happens to re-issue
682 the request, we don't immediately have it back in the
683 `waiting_map`. */
684 GNUNET_assert (GNUNET_OK ==
685 GNUNET_CONTAINER_multipeermap_remove (mesh_map,
686 &mh->target,
687 mh));
680 GNUNET_CONTAINER_multihashmap_iterate (mh->waiting_map, 688 GNUNET_CONTAINER_multihashmap_iterate (mh->waiting_map,
681 &free_waiting_entry, 689 &free_waiting_entry,
682 mh); 690 mh);
@@ -686,10 +694,8 @@ cleaner_cb (void *cls,
686 GNUNET_SCHEDULER_cancel (mh->timeout_task); 694 GNUNET_SCHEDULER_cancel (mh->timeout_task);
687 if (GNUNET_SCHEDULER_NO_TASK != mh->reset_task) 695 if (GNUNET_SCHEDULER_NO_TASK != mh->reset_task)
688 GNUNET_SCHEDULER_cancel (mh->reset_task); 696 GNUNET_SCHEDULER_cancel (mh->reset_task);
689 GNUNET_assert (GNUNET_OK == 697 GNUNET_assert (0 ==
690 GNUNET_CONTAINER_multipeermap_remove (mesh_map, 698 GNUNET_CONTAINER_multihashmap_size (mh->waiting_map));
691 &mh->target,
692 mh));
693 GNUNET_CONTAINER_multihashmap_destroy (mh->waiting_map); 699 GNUNET_CONTAINER_multihashmap_destroy (mh->waiting_map);
694 GNUNET_free (mh); 700 GNUNET_free (mh);
695} 701}
diff --git a/src/fs/gnunet-service-fs_pr.c b/src/fs/gnunet-service-fs_pr.c
index 105093361..e5a789a2b 100644
--- a/src/fs/gnunet-service-fs_pr.c
+++ b/src/fs/gnunet-service-fs_pr.c
@@ -719,10 +719,8 @@ GSF_iterate_pending_requests_ (GSF_PendingRequestIterator it, void *cls)
719} 719}
720 720
721 721
722
723
724/** 722/**
725 * Closure for "process_reply" function. 723 * Closure for process_reply() function.
726 */ 724 */
727struct ProcessReplyClosure 725struct ProcessReplyClosure
728{ 726{
@@ -800,7 +798,9 @@ update_request_performance_data (struct ProcessReplyClosure *prq,
800 * @return #GNUNET_YES (we should continue to iterate) 798 * @return #GNUNET_YES (we should continue to iterate)
801 */ 799 */
802static int 800static int
803process_reply (void *cls, const struct GNUNET_HashCode * key, void *value) 801process_reply (void *cls,
802 const struct GNUNET_HashCode *key,
803 void *value)
804{ 804{
805 struct ProcessReplyClosure *prq = cls; 805 struct ProcessReplyClosure *prq = cls;
806 struct GSF_PendingRequest *pr = value; 806 struct GSF_PendingRequest *pr = value;
@@ -1151,10 +1151,10 @@ GSF_dht_lookup_ (struct GSF_PendingRequest *pr)
1151 */ 1151 */
1152static void 1152static void
1153mesh_reply_proc (void *cls, 1153mesh_reply_proc (void *cls,
1154 enum GNUNET_BLOCK_Type type, 1154 enum GNUNET_BLOCK_Type type,
1155 struct GNUNET_TIME_Absolute expiration, 1155 struct GNUNET_TIME_Absolute expiration,
1156 size_t data_size, 1156 size_t data_size,
1157 const void *data) 1157 const void *data)
1158{ 1158{
1159 struct GSF_PendingRequest *pr = cls; 1159 struct GSF_PendingRequest *pr = cls;
1160 struct ProcessReplyClosure prq; 1160 struct ProcessReplyClosure prq;
@@ -1173,10 +1173,10 @@ mesh_reply_proc (void *cls,
1173 /* retry -- without delay, as this is non-anonymous 1173 /* retry -- without delay, as this is non-anonymous
1174 and mesh/mesh connect will take some time anyway */ 1174 and mesh/mesh connect will take some time anyway */
1175 pr->mesh_request = GSF_mesh_query (pr->public_data.target, 1175 pr->mesh_request = GSF_mesh_query (pr->public_data.target,
1176 &pr->public_data.query, 1176 &pr->public_data.query,
1177 pr->public_data.type, 1177 pr->public_data.type,
1178 &mesh_reply_proc, 1178 &mesh_reply_proc,
1179 pr); 1179 pr);
1180 return; 1180 return;
1181 } 1181 }
1182 if (GNUNET_YES != 1182 if (GNUNET_YES !=