aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2011-11-28 14:38:15 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2011-11-28 14:38:15 +0000
commit31d6c6f6241432cebdd3d6c529f7bd2d4a6fb489 (patch)
tree2a508196f0a1517b8c2899cc718c26d6d28ac3c8 /src/ats
parentd06e15ae52dff5afd500d7fbb010a717b574e107 (diff)
downloadgnunet-31d6c6f6241432cebdd3d6c529f7bd2d4a6fb489.tar.gz
gnunet-31d6c6f6241432cebdd3d6c529f7bd2d4a6fb489.zip
fixing mantis #1970
bug: ats only deleted active addresses, but should delete all addresses with session removed and addrlen 0
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/ats_api_scheduling.c12
-rw-r--r--src/ats/gnunet-service-ats_addresses.c10
2 files changed, 19 insertions, 3 deletions
diff --git a/src/ats/ats_api_scheduling.c b/src/ats/ats_api_scheduling.c
index f9f4d2bbb..89a3bb472 100644
--- a/src/ats/ats_api_scheduling.c
+++ b/src/ats/ats_api_scheduling.c
@@ -542,6 +542,18 @@ process_ats_message (void *cls, const struct GNUNET_MessageHeader *msg)
542 address.address = plugin_address; 542 address.address = plugin_address;
543 address.address_length = plugin_address_length; 543 address.address_length = plugin_address_length;
544 address.transport_name = plugin_name; 544 address.transport_name = plugin_name;
545
546 if ((s == NULL) && (0 == address.address_length))
547 {
548 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
549 "ATS returned invalid address for peer `%s' transport `%s' address length %i, session_id %i\n",
550 GNUNET_i2s(&address.peer) , address.transport_name, plugin_address_length, session_id);
551 GNUNET_break_op (0);
552 GNUNET_CLIENT_receive (sh->client, &process_ats_message, sh,
553 GNUNET_TIME_UNIT_FOREVER_REL);
554 return;
555 }
556
545 sh->suggest_cb (sh->suggest_cb_cls, &address, s, m->bandwidth_out, 557 sh->suggest_cb (sh->suggest_cb_cls, &address, s, m->bandwidth_out,
546 m->bandwidth_in, atsi, ats_count); 558 m->bandwidth_in, atsi, ats_count);
547 559
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c
index 726d10879..626ffbf61 100644
--- a/src/ats/gnunet-service-ats_addresses.c
+++ b/src/ats/gnunet-service-ats_addresses.c
@@ -316,7 +316,7 @@ destroy_by_session_id (void *cls, const GNUNET_HashCode * key, void *value)
316 aa->addr, 316 aa->addr,
317 aa->addr_len)) ) 317 aa->addr_len)) )
318 { 318 {
319 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 319 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
320 "Deleting address for peer `%s': `%s'\n", 320 "Deleting address for peer `%s': `%s'\n",
321 GNUNET_i2s (&aa->peer), aa->plugin); 321 GNUNET_i2s (&aa->peer), aa->plugin);
322 if (GNUNET_YES == destroy_address (aa)) 322 if (GNUNET_YES == destroy_address (aa))
@@ -329,14 +329,18 @@ destroy_by_session_id (void *cls, const GNUNET_HashCode * key, void *value)
329 GNUNET_break (0 == strcmp (info->plugin, aa->plugin)); 329 GNUNET_break (0 == strcmp (info->plugin, aa->plugin));
330 /* session died */ 330 /* session died */
331 aa->session_id = 0; 331 aa->session_id = 0;
332
332 if (GNUNET_YES == aa->active) 333 if (GNUNET_YES == aa->active)
333 { 334 {
334 aa->active = GNUNET_NO; 335 aa->active = GNUNET_NO;
335 active_addr_count--; 336 active_addr_count--;
336 if (aa->addr_len == 0)
337 (void) destroy_address (aa);
338 recalculate_assigned_bw (); 337 recalculate_assigned_bw ();
339 } 338 }
339
340 /* session == 0 and addrlen == 0 : destroy address */
341 if (aa->addr_len == 0)
342 (void) destroy_address (aa);
343
340 return GNUNET_OK; 344 return GNUNET_OK;
341} 345}
342 346