[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));
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r35121 - gnunet/src/ats,
gnunet <=