Fix for new RPM build machine.
[awesomized/libmemcached] / libmemcached / memcached_hosts.c
index 55d7a49df403ea736e905a43f3576748c4069482..54440d3582607cd6115245fd906bfc9ba7af7eff 100644 (file)
@@ -89,9 +89,10 @@ void server_list_free(memcached_st *ptr, memcached_server_st *servers)
 
 static int continuum_item_cmp(const void *t1, const void *t2)
 {
-  memcached_continuum_item_st *ct1 = (memcached_continuum_item_st *)t1;
-  memcached_continuum_item_st *ct2 = (memcached_continuum_item_st *)t2;
+  memcached_continuum_item_st *ct1= (memcached_continuum_item_st *)t1;
+  memcached_continuum_item_st *ct2= (memcached_continuum_item_st *)t2;
 
+  /* Why 153? Hmmm... */
   WATCHPOINT_ASSERT(ct1->value != 153);
   if (ct1->value == ct2->value)
     return 0;
@@ -169,11 +170,15 @@ memcached_return update_continuum(memcached_st *ptr)
     pointer_counter+= pointer_per_server;
   }
 
+  WATCHPOINT_ASSERT(ptr);
+  WATCHPOINT_ASSERT(ptr->continuum);
+  WATCHPOINT_ASSERT(ptr->number_of_hosts);
   WATCHPOINT_ASSERT(ptr->number_of_hosts * MEMCACHED_POINTS_PER_SERVER <= MEMCACHED_CONTINUUM_SIZE);
   qsort(ptr->continuum, ptr->number_of_hosts * MEMCACHED_POINTS_PER_SERVER, sizeof(memcached_continuum_item_st), continuum_item_cmp);
 
   ptr->continuum_points_counter= pointer_counter;
-  memcached_stat_free(NULL, stat_p);
+  if (stat_p)
+    memcached_stat_free(NULL, stat_p);
 
 #ifdef HAVE_DEBUG
   for (index= 0; index < ((ptr->number_of_hosts * MEMCACHED_POINTS_PER_SERVER) - 1); index++) 
@@ -281,6 +286,32 @@ static memcached_return server_add(memcached_st *ptr, char *hostname,
   return run_distribution(ptr);
 }
 
+memcached_return memcached_server_remove(memcached_server_st *st_ptr)
+{
+  uint32_t x, index;
+  memcached_st *ptr= st_ptr->root;
+  memcached_server_st *list= ptr->hosts;
+
+  for (x= 0, index= 0; x < ptr->number_of_hosts; x++) 
+  {
+    if (strncmp(list[x].hostname, st_ptr->hostname, MEMCACHED_MAX_HOST_LENGTH)!=0 || list[x].port != st_ptr->port) 
+    {
+      memcpy(list+index, list+x, sizeof(memcached_server_st));
+      index++;
+    } 
+  }
+  ptr->number_of_hosts= index;
+
+  if (st_ptr->address_info) 
+  {
+    freeaddrinfo(st_ptr->address_info);
+    st_ptr->address_info= NULL;
+  }
+  run_distribution(ptr);
+
+  return MEMCACHED_SUCCESS;
+}
+
 memcached_server_st *memcached_server_list_append(memcached_server_st *ptr, 
                                                   char *hostname, unsigned int port, 
                                                   memcached_return *error)