Incomming fixes from Charles on the replication branch.
[awesomized/libmemcached] / lib / memcached_get.c
index 374793f5346e485718c9436ca7d679006178cabe..12d301ec35319d0faabbe336f75e002a0d024777 100644 (file)
@@ -50,22 +50,22 @@ char *memcached_get_by_key(memcached_st *ptr,
 
   do
   {
+    char response_buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
+
     if (memcached_server_response_count(&ptr->hosts[server_key]))
     {
-      char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
-
       if (ptr->flags & MEM_NO_BLOCK)
         (void)memcached_io_write(&ptr->hosts[server_key], NULL, 0, 1);
 
       while(memcached_server_response_count(&ptr->hosts[server_key]))
-        (void)memcached_response(&ptr->hosts[server_key], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, result_buffer);
+        (void)memcached_response(&ptr->hosts[server_key], response_buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, result_buffer);
     }
 
     rc[replicas]= memcached_do(&ptr->hosts[server_key], buffer, send_length, 1);
     if (rc[replicas] != MEMCACHED_SUCCESS)
       goto error;
 
-    rc[replicas]= memcached_response(&ptr->hosts[server_key], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, result_buffer);
+    rc[replicas]= memcached_response(&ptr->hosts[server_key], response_buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, result_buffer);
 
     /* On no key found, we check the replica */
     if (rc[replicas] == MEMCACHED_END) /* END means that we move on to the next */
@@ -79,12 +79,13 @@ char *memcached_get_by_key(memcached_st *ptr,
       if (result_buffer->flags)
         *flags= result_buffer->flags;
 
+      *error= MEMCACHED_SUCCESS;
       return  memcached_string_c_copy(&result_buffer->value);
     }
 
     /* On error we just jump to the next potential server */
 error:
-    if (replicas > 1 && ptr->distribution == MEMCACHED_DISTRIBUTION_CONSISTENT)
+    if (ptr->number_of_replicas > 1)
     {
       if (server_key == (ptr->number_of_hosts - 1))
         server_key= 0;