Fix for wrong count on memcache_server_st structure (aka the old hack for
author <brian@gir-2.local> <>
Fri, 21 Mar 2008 16:57:19 +0000 (09:57 -0700)
committer <brian@gir-2.local> <>
Fri, 21 Mar 2008 16:57:19 +0000 (09:57 -0700)
server lists).

ChangeLog
libmemcached/memcached_hosts.c
tests/function.c

index 70377ed5742b94e103c6fa2b30a46a2e12707d06..7c7828f61c45855d2c3517df1faafa17311f53d4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 0.19
   * Read through cached support.
   * Fixed for cas by key operation.
+  * Fix for memcached_server_st list structures to have correct count.
 
 
 0.18 Sun Mar 16 21:57:55 PDT 2008
index c62c3b41984402665b324b097f3717ef930a1a01..b97476a5b7e76be3c8279a3a203386eebe4b3f41 100644 (file)
@@ -179,11 +179,12 @@ static memcached_return server_add(memcached_st *ptr, char *hostname,
 
   host_reset(ptr, &ptr->hosts[ptr->number_of_hosts], hostname, port, type);
   ptr->number_of_hosts++;
-  ptr->hosts[0].count++;
 
   if (ptr->number_of_hosts > 1)
     qsort(ptr->hosts, ptr->number_of_hosts, sizeof(memcached_server_st), compare_servers);
 
+  ptr->hosts[0].count= ptr->number_of_hosts;
+
   rebalance_wheel(ptr);
 
   LIBMEMCACHED_MEMCACHED_SERVER_ADD_END();
@@ -220,14 +221,11 @@ memcached_server_st *memcached_server_list_append(memcached_server_st *ptr,
 
   host_reset(NULL, &new_host_list[count-1], hostname, port, MEMCACHED_CONNECTION_TCP);
 
-  /* Backwards compatibility hack */
-  new_host_list[0].count++;
-
-  count= new_host_list[0].count;
-
+  /* We alway sort lists by default */
   if (new_host_list[0].count > 1)
     qsort(new_host_list, count, sizeof(memcached_server_st), compare_servers);
 
+  /* Backwards compatibility hack */
   new_host_list[0].count= count;
 
 
index 19c104df4689e602aac42e2e33ae42fb4f3d2178..9e10552c26f16c4b287757e5827dd37ec2e0ea8e 100644 (file)
@@ -87,6 +87,8 @@ uint8_t server_sort_test(memcached_st *ptr)
   {
     test_ports[x]= random() % 64000;
     rc= memcached_server_add(local_memc, "localhost", test_ports[x]);
+    assert(local_memc->number_of_hosts == x+1);
+    assert(local_memc->hosts[0].count == x+1);
     assert(rc == MEMCACHED_SUCCESS);
   }