gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r35121 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r35121 - gnunet/src/ats
Date: Fri, 6 Feb 2015 13:18:53 +0100

Author: grothoff
Date: 2015-02-06 13:18:53 +0100 (Fri, 06 Feb 2015)
New Revision: 35121

Modified:
   gnunet/src/ats/perf_ats_solver.c
   gnunet/src/ats/plugin_ats_mlp.c
   gnunet/src/ats/plugin_ats_ril.c
Log:
-fix misc minor crashes

Modified: gnunet/src/ats/perf_ats_solver.c
===================================================================
--- gnunet/src/ats/perf_ats_solver.c    2015-02-06 09:37:01 UTC (rev 35120)
+++ gnunet/src/ats/perf_ats_solver.c    2015-02-06 12:18:53 UTC (rev 35121)
@@ -329,6 +329,7 @@
   GNUNET_free_non_null (ph.iterations_results);
 
   GAS_normalization_stop ();
+  GAS_preference_done ();
   ret = res;
 }
 
@@ -1317,6 +1318,7 @@
                 ph.env.in_quota[c]);
   }
   GAS_normalization_start ();
+  GAS_preference_init ();
 
   GNUNET_asprintf (&plugin, "libgnunet_plugin_ats_%s", ph.ats_string);
   GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Initializing solver `%s'\n"), 
ph.ats_string);

Modified: gnunet/src/ats/plugin_ats_mlp.c
===================================================================
--- gnunet/src/ats/plugin_ats_mlp.c     2015-02-06 09:37:01 UTC (rev 35120)
+++ gnunet/src/ats/plugin_ats_mlp.c     2015-02-06 12:18:53 UTC (rev 35121)
@@ -219,11 +219,6 @@
   struct GNUNET_ATS_PluginEnvironment *env;
 
   /**
-   * Address hashmap for lookups
-   */
-  const struct GNUNET_CONTAINER_MultiPeerMap *addresses;
-
-  /**
    * Exclude peer from next result propagation
    */
   const struct GNUNET_PeerIdentity *exclude_peer;
@@ -1290,8 +1285,9 @@
   /* create the glpk problem */
   p->prob = glp_create_prob ();
   GNUNET_assert (NULL != p->prob);
-  p->num_peers = mlp_create_problem_count_peers (mlp->requested_peers, 
mlp->addresses);
-  p->num_addresses = mlp_create_problem_count_addresses (mlp->requested_peers, 
mlp->addresses);
+  p->num_peers = mlp_create_problem_count_peers (mlp->requested_peers, 
mlp->env->addresses);
+  p->num_addresses = mlp_create_problem_count_addresses (mlp->requested_peers,
+                                                         mlp->env->addresses);
 
   /* Create problem matrix: 10 * #addresses + #q * #addresses + #q, + #peer + 
2 + 1 */
   p->num_elements = (10 * p->num_addresses + mlp->pv.m_q * p->num_addresses +
@@ -1331,7 +1327,7 @@
   mlp_create_problem_add_invariant_rows (mlp, p);
 
   /* Adding address dependent columns constraint rows */
-  GNUNET_CONTAINER_multipeermap_iterate (mlp->addresses,
+  GNUNET_CONTAINER_multipeermap_iterate (mlp->env->addresses,
                                         
&mlp_create_problem_add_address_information,
                                         mlp);
 
@@ -1618,7 +1614,7 @@
       notify(mlp, GAS_OP_SOLVE_STOP, GAS_STAT_SUCCESS, GAS_INFO_NONE);
       return GNUNET_OK; /* No pending requests */
     }
-  if (0 == GNUNET_CONTAINER_multipeermap_size(mlp->addresses))
+  if (0 == GNUNET_CONTAINER_multipeermap_size(mlp->env->addresses))
     {
       notify(mlp, GAS_OP_SOLVE_STOP, GAS_STAT_SUCCESS, GAS_INFO_NONE);
       return GNUNET_OK; /* No addresses available */
@@ -1831,7 +1827,7 @@
       GAS_INFO_NONE);
   if ((GNUNET_OK == res_lp) && (GNUNET_OK == mip_res))
     {
-      GNUNET_CONTAINER_multipeermap_iterate(mlp->addresses,
+      GNUNET_CONTAINER_multipeermap_iterate(mlp->env->addresses,
           &mlp_propagate_results, mlp);
     }
   notify (mlp, GAS_OP_SOLVE_UPDATE_NOTIFICATION_STOP,
@@ -2133,7 +2129,7 @@
       mlp->stat_mlp_prob_changed = GNUNET_YES;
 
       if ((GNUNET_YES == mlp->opt_mlp_auto_solve)&&
-          (GNUNET_YES == GNUNET_CONTAINER_multipeermap_contains(mlp->addresses,
+          (GNUNET_YES == 
GNUNET_CONTAINER_multipeermap_contains(mlp->env->addresses,
                                                                peer)))
       {
         mlp->exclude_peer = peer;
@@ -2143,7 +2139,7 @@
   }
   /* Get prefered address */
   res = NULL;
-  GNUNET_CONTAINER_multipeermap_get_multiple (mlp->addresses, peer,
+  GNUNET_CONTAINER_multipeermap_get_multiple (mlp->env->addresses, peer,
                                               &mlp_get_preferred_address_it, 
&res);
   return res;
 }
@@ -2430,12 +2426,6 @@
   struct GNUNET_TIME_Relative max_duration;
   long long unsigned int max_iterations;
 
-  GNUNET_assert (NULL != env->cfg);
-  GNUNET_assert (NULL != env->addresses);
-  GNUNET_assert (NULL != env->bandwidth_changed_cb);
-  GNUNET_assert (NULL != env->get_preferences);
-  GNUNET_assert (NULL != env->get_property);
-
   /* Init GLPK environment */
   int res = glp_init_env();
   switch (res) {

Modified: gnunet/src/ats/plugin_ats_ril.c
===================================================================
--- gnunet/src/ats/plugin_ats_ril.c     2015-02-06 09:37:01 UTC (rev 35120)
+++ gnunet/src/ats/plugin_ats_ril.c     2015-02-06 12:18:53 UTC (rev 35121)
@@ -223,6 +223,7 @@
   struct ATS_Address *address_naked;
 };
 
+
 struct RIL_Peer_Agent
 {
   /**
@@ -273,7 +274,7 @@
   /**
    * Last perceived state feature vector
    */
-  double * s_old;
+  double *s_old;
 
   /**
    * Last chosen action
@@ -293,17 +294,17 @@
   /**
    * Address in use
    */
-  struct ATS_Address * address_inuse;
+  struct ATS_Address *address_inuse;
 
   /**
    * Head of addresses DLL
    */
-  struct RIL_Address_Wrapped * addresses_head;
+  struct RIL_Address_Wrapped *addresses_head;
 
   /**
    * Tail of addresses DLL
    */
-  struct RIL_Address_Wrapped * addresses_tail;
+  struct RIL_Address_Wrapped *addresses_tail;
 
   /**
    * Inbound bandwidth assigned by the agent
@@ -323,7 +324,7 @@
   /**
    * The address which has to be issued
    */
-  struct ATS_Address * suggestion_address;
+  struct ATS_Address *suggestion_address;
 
   /**
    * The agent's last objective value
@@ -475,7 +476,8 @@
  * @return estimation value
  */
 static double
-agent_q (struct RIL_Peer_Agent *agent, double *state, int action)
+agent_q (struct RIL_Peer_Agent *agent,
+         const double *state, int action)
 {
   int i;
   double result = 0;
@@ -1388,6 +1390,8 @@
     if (agent_action_is_possible(agent, i))
     {
       eqt[i] = exp(agent_q(agent,state,i) / 
agent->envi->parameters.temperature);
+      if (isinf (eqt[i]))
+        eqt[i] = isinf(eqt[i]) * UINT32_MAX;
       sum += eqt[i];
     }
   }
@@ -1529,6 +1533,7 @@
 static void
 ril_step (struct GAS_RIL_Handle *solver);
 
+
 /**
  * Task for the scheduler, which performs one step and lets the solver know 
that
  * no further step is scheduled.
@@ -1932,7 +1937,8 @@
   for (cur = solver->agents_head; NULL != cur; cur = cur->next)
   {
     if (cur->suggestion_issue) {
-      solver->env->bandwidth_changed_cb(solver->env->cls, 
cur->suggestion_address);
+      solver->env->bandwidth_changed_cb (solver->env->cls,
+                                         cur->suggestion_address);
       cur->suggestion_issue = GNUNET_NO;
     }
   }
@@ -2257,7 +2263,7 @@
   struct GAS_RIL_Handle *s = solver;
   struct RIL_Peer_Agent *agent;
   struct RIL_Address_Wrapped *address_wrapped;
-  int address_was_used = address->active;
+  int address_was_used;
   int address_index;
   unsigned int m_new;
   unsigned int n_new;
@@ -2274,9 +2280,9 @@
   if (NULL == agent)
   {
     net = address->solver_information;
-    GNUNET_assert(!ril_network_is_active (s, net->type));
-    LOG(GNUNET_ERROR_TYPE_DEBUG,
-        "No agent allocated for peer yet, since address was in inactive 
network\n");
+    GNUNET_assert(! ril_network_is_active (s, net->type));
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "No agent allocated for peer yet, since address was in inactive 
network\n");
     return;
   }
 
@@ -2289,14 +2295,30 @@
   if (NULL == address_wrapped)
   {
     net = address->solver_information;
-    LOG(GNUNET_ERROR_TYPE_DEBUG,
-        "Address not considered by agent, address was in inactive network\n");
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "Address not considered by agent, address was in inactive network\n");
     return;
   }
+  GNUNET_CONTAINER_DLL_remove (agent->addresses_head,
+                               agent->addresses_tail,
+                               address_wrapped);
+  GNUNET_free (address_wrapped);
+  if (agent->suggestion_address == address)
+  {
+    agent->suggestion_address = NULL;
+    agent->suggestion_issue = GNUNET_NO;
+    address_was_used = GNUNET_YES;
+  }
+  else if (agent->address_inuse == address)
+  {
+    agent->address_inuse = NULL;
+    address_was_used = GNUNET_YES;
+  }
+  else
+  {
+    address_was_used = GNUNET_NO;
+  }
 
-  GNUNET_CONTAINER_DLL_remove(agent->addresses_head, agent->addresses_tail, 
address_wrapped);
-  GNUNET_free(address_wrapped);
-
   //decrease W
   m_new = agent->m - ((s->parameters.rbf_divisor+1) * 
(s->parameters.rbf_divisor+1));
   n_new = agent->n - 1;
@@ -2327,8 +2349,8 @@
   }
   //decrease old state vector
   ril_cut_from_vector ((void **) &agent->s_old, sizeof(double),
-      address_index * ((s->parameters.rbf_divisor+1) * 
(s->parameters.rbf_divisor+1)),
-      ((s->parameters.rbf_divisor+1) * (s->parameters.rbf_divisor+1)), 
agent->m);
+                       address_index * ((s->parameters.rbf_divisor+1) * 
(s->parameters.rbf_divisor+1)),
+                       ((s->parameters.rbf_divisor+1) * 
(s->parameters.rbf_divisor+1)), agent->m);
   agent->m = m_new;
   agent->n = n_new;
 
@@ -2336,8 +2358,12 @@
   {
     if (NULL != agent->addresses_head) //if peer has an address left, use it
     {
-      envi_set_active_suggestion (s, agent, 
agent->addresses_head->address_naked, agent->bw_in, agent->bw_out,
-          GNUNET_YES);
+      envi_set_active_suggestion (s,
+                                  agent,
+                                  agent->addresses_head->address_naked,
+                                  agent->bw_in,
+                                  agent->bw_out,
+                                  GNUNET_YES);
     }
     else
     {
@@ -2540,8 +2566,8 @@
   ril_step (s);
 
   LOG(GNUNET_ERROR_TYPE_DEBUG,
-      "API_stop_get_preferred_address() Paused agent for peer '%s' with %s 
address\n",
-      GNUNET_i2s (peer), agent->address_inuse->plugin);
+      "API_stop_get_preferred_address() Paused agent for peer '%s'\n",
+      GNUNET_i2s (peer));
 }
 
 




reply via email to

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