changeset 2348:863c60e608f8 draft

Correctly delete IPv6 addresses from eloop timeouts
author Roy Marples <roy@marples.name>
date Sat, 01 Mar 2014 17:59:33 +0000
parents 347128ba938e
children 71317f9845eb
files ipv6.c ipv6nd.c
diffstat 2 files changed, 3 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/ipv6.c	Sat Mar 01 10:57:45 2014 +0000
+++ b/ipv6.c	Sat Mar 01 17:59:33 2014 +0000
@@ -468,9 +468,7 @@
 		if (ifd && ap->delegating_iface != ifd)
 			continue;
 		TAILQ_REMOVE(addrs, ap, next);
-		if (ap->dadcallback)
-			eloop_q_timeout_delete(ap->iface->ctx->eloop,
-			    0, NULL, ap->dadcallback);
+		eloop_q_timeout_delete(ap->iface->ctx->eloop, 0, NULL, ap);
 		/* Only drop the address if no other RAs have assigned it.
 		 * This is safe because the RA is removed from the list
 		 * before we are called. */
--- a/ipv6nd.c	Sat Mar 01 10:57:45 2014 +0000
+++ b/ipv6nd.c	Sat Mar 01 17:59:33 2014 +0000
@@ -1510,9 +1510,8 @@
 				    errno != EADDRNOTAVAIL && errno != ENXIO)
 					syslog(LOG_ERR, "del_address6 %m");
 			}
-			if (ap->dadcallback)
-				eloop_q_timeout_delete(ap->iface->ctx->eloop,
-				    0, NULL, ap->dadcallback);
+			eloop_q_timeout_delete(ap->iface->ctx->eloop,
+			    0, NULL, ap);
 			free(ap);
 		} else if (!IN6_IS_ADDR_UNSPECIFIED(&ap->addr)) {
 			ipv6nd_probeaddr(ap);