From d04a8dfbeed9ff480c2395165638b081150973c2 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Thu, 26 Sep 2013 13:03:04 +0000 Subject: [PATCH] disconnect peer if no address is available after deletion --- src/ats/gnunet-service-ats-solver_mlp.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/ats/gnunet-service-ats-solver_mlp.c b/src/ats/gnunet-service-ats-solver_mlp.c index 060404521..299639de8 100644 --- a/src/ats/gnunet-service-ats-solver_mlp.c +++ b/src/ats/gnunet-service-ats-solver_mlp.c @@ -1443,6 +1443,7 @@ GAS_mlp_address_delete (void *solver, struct ATS_Peer *p; struct GAS_MLP_Handle *mlp = solver; struct MLP_information *mlpi; + int was_active; GNUNET_assert (NULL != solver); GNUNET_assert (NULL != address); @@ -1454,7 +1455,10 @@ GAS_mlp_address_delete (void *solver, GNUNET_free (mlpi); address->solver_information = NULL; } + was_active = address->active; address->active = GNUNET_NO; + address->assigned_bw_in = BANDWIDTH_ZERO; + address->assigned_bw_out = BANDWIDTH_ZERO; /* Is this peer included in the problem? */ if (NULL == (p = GNUNET_CONTAINER_multihashmap_get (mlp->requested_peers, &address->peer.hashPubKey))) @@ -1474,6 +1478,15 @@ GAS_mlp_address_delete (void *solver, { GAS_mlp_solve_problem (solver); } + if (GNUNET_YES == was_active) + { + if (NULL == GAS_mlp_get_preferred_address (solver, &address->peer)) + { + /* No alternative address, disconnecting peer */ + mlp->bw_changed_cb (mlp->bw_changed_cb_cls, address); + } + } + return; } -- 2.25.1