Commit ec06184e authored by Dag Erling Smørgrav's avatar Dag Erling Smørgrav

Merged revisions 1809 via svnmerge from

svn+ssh://projects.linpro.no/svn/varnish/trunk/varnish-cache

........
  r1809 | phk | 2007-08-07 12:27:34 +0200 (Tue, 07 Aug 2007) | 7 lines
  
  Minimize a race when looking up addresses for backends.
  
  The race is not closed however, proper locking needs to be thought out.
  
  An XXX comment documents this for now.
........


git-svn-id: http://www.varnish-cache.org/svn/branches/1.1@2137 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent c83cfe6c
......@@ -116,20 +116,20 @@ vbe_new_conn(void)
return (vbc);
}
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------
* XXX: There is a race here, we need to lock the replacement of the
* XXX: resolved addresses, or some other thread might try to access
* XXX: them while/during/after we changed them.
* XXX: preferably, we should make a copy to the vbe while we hold a
* XXX: lock anyway.
*/
static void
vbe_lookup(struct backend *bp)
{
struct addrinfo *res, hint;
struct addrinfo *res, hint, *old;
int error;
if (bp->addr != NULL) {
freeaddrinfo(bp->addr);
bp->addr = NULL;
bp->last_addr = NULL;
}
memset(&hint, 0, sizeof hint);
hint.ai_family = PF_UNSPEC;
hint.ai_socktype = SOCK_STREAM;
......@@ -144,8 +144,11 @@ vbe_lookup(struct backend *bp)
printf("getaddrinfo: %s\n", gai_strerror(error)); /* XXX */
return;
}
old = bp->addr;
bp->last_addr = res;
bp->addr = res;
if (old != NULL)
freeaddrinfo(old);
}
/*--------------------------------------------------------------------*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment