diff options
author | Brian Aker <brian@tangent.org> | 2011-09-09 22:16:02 -0700 |
---|---|---|
committer | Brian Aker <brian@tangent.org> | 2011-09-09 22:16:02 -0700 |
commit | dcddc0964b560a3494ee079822a94074ea94b832 (patch) | |
tree | d536f1917ce1135aa88e5228ba2963747093847a | |
parent | 168fa12cd66705fe0525070400fdc3a4f75159e8 (diff) | |
download | libmemcached-dcddc0964b560a3494ee079822a94074ea94b832.tar.gz |
Solution for cases where next has been set to NULL.
-rw-r--r-- | libmemcached/connect.cc | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/libmemcached/connect.cc b/libmemcached/connect.cc index 589c40c5..1c4ea913 100644 --- a/libmemcached/connect.cc +++ b/libmemcached/connect.cc @@ -400,9 +400,13 @@ static memcached_return_t network_connect(memcached_server_st *server) WATCHPOINT_ASSERT(server->fd == INVALID_SOCKET); WATCHPOINT_ASSERT(server->cursor_active == 0); + /* + We want to check both of these because if address_info_next has been fully tried, we want to do a new lookup to make sure we have picked up on any new DNS information. + */ if (server->address_info == NULL or server->address_info_next == NULL) { WATCHPOINT_ASSERT(server->state == MEMCACHED_SERVER_STATE_NEW); + server->address_info_next= NULL; memcached_return_t rc; uint32_t counter= 5; while (--counter) @@ -428,6 +432,12 @@ static memcached_return_t network_connect(memcached_server_st *server) } } + if (server->address_info_next == NULL) + { + server->address_info_next= server->address_info; + server->state= MEMCACHED_SERVER_STATE_ADDRINFO; + } + /* Create the socket */ while (server->address_info_next and server->fd == INVALID_SOCKET) { |