diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-11-28 14:38:15 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-11-28 14:38:15 +0000 |
commit | 31d6c6f6241432cebdd3d6c529f7bd2d4a6fb489 (patch) | |
tree | 2a508196f0a1517b8c2899cc718c26d6d28ac3c8 /src/ats | |
parent | d06e15ae52dff5afd500d7fbb010a717b574e107 (diff) | |
download | gnunet-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.c | 12 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 10 |
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 | ||