Small cleanup in string.h and converted result_st macro to inline.
[m6w6/libmemcached] / libmemcached / server.c
index 2cff36da2eedf007a0c3d163137a2cf169151b77..f61f572e6b4d5dd439903e03a2deb3b58d221eb6 100644 (file)
@@ -1,5 +1,5 @@
 /* LibMemcached
- * Copyright (C) 2006-2009 Brian Aker 
+ * Copyright (C) 2006-2009 Brian Aker
  * All rights reserved.
  *
  * Use and distribution licensed under the BSD license.  See
@@ -18,7 +18,7 @@ memcached_server_st *memcached_server_create(memcached_st *memc, memcached_serve
 {
   if (ptr == NULL)
   {
-    ptr= (memcached_server_st *)calloc(1, sizeof(memcached_server_st));
+    ptr= (memcached_server_st *)memc->call_calloc(memc, 1, sizeof(memcached_server_st));
 
     if (!ptr)
       return NULL; /*  MEMCACHED_MEMORY_ALLOCATION_FAILURE */
@@ -51,6 +51,7 @@ memcached_server_st *memcached_server_create_with(memcached_st *memc, memcached_
   host->fd= -1;
   host->type= type;
   host->read_ptr= host->read_buffer;
+  host->state.is_corked= 0;
   if (memc)
     host->next_retry= memc->retry_timeout;
   if (type == MEMCACHED_CONNECTION_UDP)
@@ -94,9 +95,9 @@ memcached_server_st *memcached_server_clone(memcached_server_st *clone, memcache
   if (ptr == NULL)
     return NULL;
 
-  rv = memcached_server_create_with(ptr->root, clone,
-                                    ptr->hostname, ptr->port, ptr->weight,
-                                    ptr->type);
+  rv= memcached_server_create_with(ptr->root, clone,
+                                   ptr->hostname, ptr->port, ptr->weight,
+                                   ptr->type);
   if (rv != NULL)
   {
     rv->cached_errno= ptr->cached_errno;
@@ -113,17 +114,19 @@ memcached_return_t memcached_server_cursor(memcached_st *ptr,
                                            void *context,
                                            uint32_t number_of_callbacks)
 {
-  unsigned int y;
+  uint32_t y;
 
-  for (y= 0; y < ptr->number_of_hosts; y++)
+  for (y= 0; y < memcached_server_count(ptr); y++)
   {
-    unsigned int x;
+    uint32_t x;
+    memcached_server_instance_st *instance=
+      memcached_server_instance_fetch(ptr, y);
 
     for (x= 0; x < number_of_callbacks; x++)
     {
       unsigned int iferror;
 
-      iferror= (*callback[x])(ptr, &ptr->hosts[y], context);
+      iferror= (*callback[x])(ptr, instance, context);
 
       if (iferror)
         continue;
@@ -136,13 +139,14 @@ memcached_return_t memcached_server_cursor(memcached_st *ptr,
 memcached_server_st *memcached_server_by_key(memcached_st *ptr,  const char *key, size_t key_length, memcached_return_t *error)
 {
   uint32_t server_key;
+  memcached_server_instance_st *instance;
 
   *error= memcached_validate_key_length(key_length,
                                         ptr->flags.binary_protocol);
   unlikely (*error != MEMCACHED_SUCCESS)
     return NULL;
 
-  unlikely (ptr->number_of_hosts == 0)
+  unlikely (memcached_server_count(ptr) == 0)
   {
     *error= MEMCACHED_NO_SERVERS;
     return NULL;
@@ -155,17 +159,17 @@ memcached_server_st *memcached_server_by_key(memcached_st *ptr,  const char *key
   }
 
   server_key= memcached_generate_hash(ptr, key, key_length);
+  instance= memcached_server_instance_fetch(ptr, server_key);
 
-  return memcached_server_clone(NULL, &ptr->hosts[server_key]);
+  return memcached_server_clone(NULL, instance);
 
 }
 
 const char *memcached_server_error(memcached_server_st *ptr)
 {
-  if (ptr)
-    return ptr->cached_server_error;
-  else
-    return NULL;
+  return ptr 
+    ?  ptr->cached_server_error
+    : NULL;
 }
 
 void memcached_server_error_reset(memcached_server_st *ptr)
@@ -177,3 +181,15 @@ memcached_server_st *memcached_server_get_last_disconnect(memcached_st *ptr)
 {
   return ptr->last_disconnected_server;
 }
+
+uint32_t memcached_server_list_count(memcached_server_st *ptr)
+{
+  return (ptr == NULL)
+    ? 0
+    : memcached_servers_count(ptr);
+}
+
+void memcached_server_list_free(memcached_server_st *ptr)
+{
+  server_list_free(NULL, ptr);
+}