fixed for loop
[oweals/gnunet.git] / src / ats / gnunet-service-ats_normalization.c
index a028b06d34ffa8b4aeb989f72b6e0450727597d6..fabef09e47a8d340c90d4812e99657f71e3e954a 100644 (file)
@@ -349,51 +349,57 @@ update_preference (struct PreferenceClient *c, struct PreferencePeer *p,
 static void
 preference_aging (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
+  struct PreferencePeer *p;
+  struct PreferenceClient *cur_client;
   int i;
   int values_to_update;
   double backup;
-  struct PreferencePeer *p;
-  struct PreferenceClient *pc;
+
   aging_task = GNUNET_SCHEDULER_NO_TASK;
-GNUNET_break (0);
   values_to_update = 0;
-  for (pc = pc_head; NULL != pc; pc =pc->next);
+  cur_client = NULL;
+
+  for (cur_client = pc_head; NULL != cur_client; cur_client = cur_client->next)
   {
-    GNUNET_break (0);
-    for (p = pc->p_head; NULL != p; p = p->next)
+    for (p = cur_client->p_head; NULL != p; p = p->next)
     {
-      GNUNET_break (0);
       /* Aging absolute values: */
       for (i = 0; i < GNUNET_ATS_PreferenceCount; i++)
       {
-        GNUNET_break (0);
         if (0 == GNUNET_TIME_absolute_get_remaining(p->next_aging[i]).rel_value_us)
         {
-          GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Aging preferences for peer `%s'\n",
+          GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Aging preference for peer `%s'\n",
               GNUNET_i2s (&p->id));
+          backup = p->f_abs[i];
+          if (p->f_abs[i] > DEFAULT_ABS_PREFERENCE)
+            p->f_abs[i] *= PREF_AGING_FACTOR;
+          if (p->f_abs[i] <= DEFAULT_ABS_PREFERENCE + PREF_EPSILON)
+            p->f_abs[i] = DEFAULT_ABS_PREFERENCE;
+          if ((p->f_abs[i] != DEFAULT_ABS_PREFERENCE) && (backup != p->f_abs[i]))
+          {
+            GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+                "Aged preference for peer `%s' from %.3f to %.3f\n",
+                GNUNET_i2s (&p->id), backup, p->f_abs[i]);
+            recalculate_rel_preferences (p->client, p, i);
+            p->next_aging[i] = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(),
+                PREF_AGING_INTERVAL);
+            values_to_update ++;
+          }
         }
+      }
+    }
+  }
 
-        backup = p->f_abs[i];
-        if (p->f_abs[i] > DEFAULT_ABS_PREFERENCE)
-          p->f_abs[i] *= PREF_AGING_FACTOR;
-        if (p->f_abs[i] <= DEFAULT_ABS_PREFERENCE + PREF_EPSILON)
-          p->f_abs[i] = DEFAULT_ABS_PREFERENCE;
-        if ((p->f_abs[i] != DEFAULT_ABS_PREFERENCE) && (backup != p->f_abs[i]))
-        {
-          GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
-              "Aged preference for peer `%s' from %.3f to %.3f\n",
-              GNUNET_i2s (&p->id), backup, p->f_abs[i]);
-          recalculate_rel_preferences (p->client, p, i);
-          p->next_aging[i] = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(),
-              PREF_AGING_INTERVAL);
-          values_to_update ++;
-        }
-      } /* preferences */
-    } /* end: p */
-  } /* end: pc_head */
   if (values_to_update > 0)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+        "Rescheduling aging task due to %u elements to age\n", values_to_update);
     aging_task = GNUNET_SCHEDULER_add_delayed (PREF_AGING_INTERVAL,
         &preference_aging, NULL);
+  }
+  else
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+        "No values to age left, not rescheduling aging task\n");
 
 }
 
@@ -440,7 +446,9 @@ GAS_normalization_normalize_preference (void *src,
   {
     c_cur = GNUNET_malloc (sizeof (struct PreferenceClient));
     c_cur->client = src;
-    GNUNET_CONTAINER_DLL_insert(pc_head, pc_tail, c_cur);
+    GNUNET_CONTAINER_DLL_insert (pc_head, pc_tail, c_cur);
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+        "Adding new client %p \n", c_cur);
   }
 
   /* Find entry for peer */
@@ -461,6 +469,7 @@ GAS_normalization_normalize_preference (void *src,
       p_cur->f_abs[i] = DEFAULT_ABS_PREFERENCE;
       /* Default value per peer relative preference for a quality: 1.0 */
       p_cur->f_rel[i] = DEFAULT_REL_PREFERENCE;
+      p_cur->next_aging[i] = GNUNET_TIME_UNIT_FOREVER_ABS;
     }
     GNUNET_CONTAINER_DLL_insert(c_cur->p_head, c_cur->p_tail, p_cur);
   }
@@ -822,6 +831,9 @@ GAS_normalization_start (GAS_Normalization_preference_changed_cb pref_ch_cb,
   prop_ch_cb = property_ch_cb;
   prop_ch_cb_cls = pref_ch_cb_cls;
 
+  pc_head = NULL;
+  pc_tail = NULL;
+
   for (i = 0; i < GNUNET_ATS_PreferenceCount; i++)
     defvalues.f_rel[i] = DEFAULT_REL_PREFERENCE;
   aging_task = GNUNET_SCHEDULER_NO_TASK;