gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r25270 - gnunet/src/fs


From: gnunet
Subject: [GNUnet-SVN] r25270 - gnunet/src/fs
Date: Wed, 5 Dec 2012 21:58:49 +0100

Author: grothoff
Date: 2012-12-05 21:58:48 +0100 (Wed, 05 Dec 2012)
New Revision: 25270

Modified:
   gnunet/src/fs/fs_search.c
Log:
-fix availability rank calculation in probe signal, immediately signal failed 
probes

Modified: gnunet/src/fs/fs_search.c
===================================================================
--- gnunet/src/fs/fs_search.c   2012-12-05 19:33:59 UTC (rev 25269)
+++ gnunet/src/fs/fs_search.c   2012-12-05 20:58:48 UTC (rev 25270)
@@ -186,9 +186,10 @@
   pi.value.search.specifics.update.cctx = sr->client_info;
   pi.value.search.specifics.update.meta = sr->meta;
   pi.value.search.specifics.update.uri = sr->uri;
-  pi.value.search.specifics.update.availability_rank = 
sr->availability_success;
-  pi.value.search.specifics.update.availability_certainty =
-      sr->availability_trials;
+  pi.value.search.specifics.update.availability_rank 
+    = 2 * sr->availability_success - sr->availability_trials;
+  pi.value.search.specifics.update.availability_certainty 
+    = sr->availability_trials;
   pi.value.search.specifics.update.applicability_rank = sr->optional_support;
   sr->client_info = GNUNET_FS_search_make_status_ (&pi, sr->sc);
   GNUNET_FS_search_start_probe_ (sr);
@@ -310,11 +311,19 @@
     sr = NULL;
     break;
   case GNUNET_FS_STATUS_DOWNLOAD_ACTIVE:
-    GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sr->probe_cancel_task);
-    sr->probe_active_time = GNUNET_TIME_absolute_get ();
-    sr->probe_cancel_task =
+    if (GNUNET_SCHEDULER_NO_TASK == sr->probe_cancel_task)
+    {
+      sr->probe_active_time = GNUNET_TIME_absolute_get ();
+      sr->probe_cancel_task =
         GNUNET_SCHEDULER_add_delayed (sr->remaining_probe_time,
                                       &probe_failure_handler, sr);
+    }
+    else
+    {
+      /* should only happen if the cancel task was already
+        created on 'DOWNLOAD_INACTIVE' as we were out of time */
+      GNUNET_break (0 == sr->remaining_probe_time.rel_value);
+    }
     break;
   case GNUNET_FS_STATUS_DOWNLOAD_INACTIVE:
     if (GNUNET_SCHEDULER_NO_TASK != sr->probe_cancel_task)
@@ -325,6 +334,9 @@
     dur = GNUNET_TIME_absolute_get_duration (sr->probe_active_time);
     sr->remaining_probe_time =
         GNUNET_TIME_relative_subtract (sr->remaining_probe_time, dur);
+    if (0 == sr->remaining_probe_time.rel_value)
+      sr->probe_cancel_task =
+        GNUNET_SCHEDULER_add_now (&probe_failure_handler, sr);
     GNUNET_FS_search_result_sync_ (sr);
     break;
   default:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]