aboutsummaryrefslogtreecommitdiff
path: root/src/fs/gnunet-service-fs_cp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs/gnunet-service-fs_cp.c')
-rw-r--r--src/fs/gnunet-service-fs_cp.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/src/fs/gnunet-service-fs_cp.c b/src/fs/gnunet-service-fs_cp.c
index e916a73a8..53838a542 100644
--- a/src/fs/gnunet-service-fs_cp.c
+++ b/src/fs/gnunet-service-fs_cp.c
@@ -335,6 +335,11 @@ static struct GNUNET_CONTAINER_MultiPeerMap *cp_map;
335 */ 335 */
336static struct GNUNET_PEERSTORE_Handle *peerstore; 336static struct GNUNET_PEERSTORE_Handle *peerstore;
337 337
338/**
339 * Task used to flush respect values to disk.
340 */
341static struct GNUNET_SCHEDULER_Task *fr_task;
342
338 343
339/** 344/**
340 * Update the latency information kept for the given peer. 345 * Update the latency information kept for the given peer.
@@ -876,19 +881,11 @@ transmit_delayed_now (void *cls)
876{ 881{
877 struct GSF_DelayedHandle *dh = cls; 882 struct GSF_DelayedHandle *dh = cls;
878 struct GSF_ConnectedPeer *cp = dh->cp; 883 struct GSF_ConnectedPeer *cp = dh->cp;
879 const struct GNUNET_SCHEDULER_TaskContext *tc;
880 884
881 GNUNET_CONTAINER_DLL_remove (cp->delayed_head, 885 GNUNET_CONTAINER_DLL_remove (cp->delayed_head,
882 cp->delayed_tail, 886 cp->delayed_tail,
883 dh); 887 dh);
884 cp->delay_queue_size--; 888 cp->delay_queue_size--;
885 tc = GNUNET_SCHEDULER_get_task_context ();
886 if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
887 {
888 GNUNET_free (dh->pm);
889 GNUNET_free (dh);
890 return;
891 }
892 (void) GSF_peer_transmit_ (cp, 889 (void) GSF_peer_transmit_ (cp,
893 GNUNET_NO, 890 GNUNET_NO,
894 UINT32_MAX, 891 UINT32_MAX,
@@ -1977,18 +1974,13 @@ GSF_connected_peer_change_preference_ (struct GSF_ConnectedPeer *cp,
1977static void 1974static void
1978cron_flush_respect (void *cls) 1975cron_flush_respect (void *cls)
1979{ 1976{
1980 const struct GNUNET_SCHEDULER_TaskContext *tc; 1977 fr_task = NULL;
1981
1982 if (NULL == cp_map)
1983 return;
1984 GNUNET_CONTAINER_multipeermap_iterate (cp_map, 1978 GNUNET_CONTAINER_multipeermap_iterate (cp_map,
1985 &flush_respect, NULL); 1979 &flush_respect,
1986 tc = GNUNET_SCHEDULER_get_task_context (); 1980 NULL);
1987 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 1981 fr_task = GNUNET_SCHEDULER_add_delayed_with_priority (RESPECT_FLUSH_FREQ,
1988 return; 1982 GNUNET_SCHEDULER_PRIORITY_HIGH,
1989 GNUNET_SCHEDULER_add_delayed_with_priority (RESPECT_FLUSH_FREQ, 1983 &cron_flush_respect, NULL);
1990 GNUNET_SCHEDULER_PRIORITY_HIGH,
1991 &cron_flush_respect, NULL);
1992} 1984}
1993 1985
1994 1986
@@ -2000,8 +1992,8 @@ GSF_connected_peer_init_ ()
2000{ 1992{
2001 cp_map = GNUNET_CONTAINER_multipeermap_create (128, GNUNET_YES); 1993 cp_map = GNUNET_CONTAINER_multipeermap_create (128, GNUNET_YES);
2002 peerstore = GNUNET_PEERSTORE_connect (GSF_cfg); 1994 peerstore = GNUNET_PEERSTORE_connect (GSF_cfg);
2003 GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_HIGH, 1995 fr_task = GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_HIGH,
2004 &cron_flush_respect, NULL); 1996 &cron_flush_respect, NULL);
2005} 1997}
2006 1998
2007 1999
@@ -2033,10 +2025,15 @@ GSF_connected_peer_done_ ()
2033 &flush_respect, 2025 &flush_respect,
2034 NULL); 2026 NULL);
2035 GNUNET_CONTAINER_multipeermap_iterate (cp_map, 2027 GNUNET_CONTAINER_multipeermap_iterate (cp_map,
2036 &clean_peer, NULL); 2028 &clean_peer,
2029 NULL);
2030 GNUNET_SCHEDULER_cancel (fr_task);
2031 fr_task = NULL;
2037 GNUNET_CONTAINER_multipeermap_destroy (cp_map); 2032 GNUNET_CONTAINER_multipeermap_destroy (cp_map);
2038 cp_map = NULL; 2033 cp_map = NULL;
2039 GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_YES); 2034 GNUNET_PEERSTORE_disconnect (peerstore,
2035 GNUNET_YES);
2036
2040} 2037}
2041 2038
2042 2039