Correction to API for custom hash settings.
[m6w6/libmemcached] / libmemcached / response.c
index 37a06f44dda10268f647fc54135f2eaa5486c545..c14dd1ff6688c6678922c5d4356c77e02bbe6e17 100644 (file)
 
 #include "common.h"
 
-static memcached_return_t textual_read_one_response(memcached_server_instance_st *ptr,
+static memcached_return_t textual_read_one_response(memcached_server_write_instance_st ptr,
                                                     char *buffer, size_t buffer_length,
                                                     memcached_result_st *result);
-static memcached_return_t binary_read_one_response(memcached_server_instance_st *ptr,
+static memcached_return_t binary_read_one_response(memcached_server_write_instance_st ptr,
                                                    char *buffer, size_t buffer_length,
                                                    memcached_result_st *result);
 
-memcached_return_t memcached_read_one_response(memcached_server_instance_st *ptr,
+memcached_return_t memcached_read_one_response(memcached_server_write_instance_st ptr,
                                                char *buffer, size_t buffer_length,
                                                memcached_result_st *result)
 {
   memcached_server_response_decrement(ptr);
 
   if (result == NULL)
-    result = &ptr->root->result;
+  {
+    memcached_st *root= (memcached_st *)ptr->root;
+    result = &root->result;
+  }
 
   memcached_return_t rc;
   if (ptr->root->flags.binary_protocol)
@@ -42,13 +45,15 @@ memcached_return_t memcached_read_one_response(memcached_server_instance_st *ptr
   return rc;
 }
 
-memcached_return_t memcached_response(memcached_server_instance_st *ptr, 
+memcached_return_t memcached_response(memcached_server_write_instance_st ptr, 
                                       char *buffer, size_t buffer_length,
                                       memcached_result_st *result)
 {
   /* We may have old commands in the buffer not set, first purge */
-  if (ptr->root->flags.no_block)
-    (void)memcached_io_write(ptr, NULL, 0, 1);
+  if ((ptr->root->flags.no_block) && (memcached_is_processing_input(ptr->root) == false))
+  {
+    (void)memcached_io_write(ptr, NULL, 0, true);
+  }
 
   /*
    * The previous implementation purged all pending requests and just
@@ -74,7 +79,7 @@ memcached_return_t memcached_response(memcached_server_instance_st *ptr,
   return memcached_read_one_response(ptr, buffer, buffer_length, result);
 }
 
-static memcached_return_t textual_value_fetch(memcached_server_instance_st *ptr,
+static memcached_return_t textual_value_fetch(memcached_server_write_instance_st ptr,
                                               char *buffer,
                                               memcached_result_st *result)
 {
@@ -105,7 +110,7 @@ static memcached_return_t textual_value_fetch(memcached_server_instance_st *ptr,
     char *key;
     size_t prefix_length;
 
-    key= result->key;
+    key= result->item_key;
     result->key_length= 0;
 
     for (prefix_length= ptr->root->prefix_key_length; !(iscntrl(*string_ptr) || isspace(*string_ptr)) ; string_ptr++)
@@ -119,7 +124,7 @@ static memcached_return_t textual_value_fetch(memcached_server_instance_st *ptr,
       else
         prefix_length--;
     }
-    result->key[result->key_length]= 0;
+    result->item_key[result->key_length]= 0;
   }
 
   if (end_ptr == string_ptr)
@@ -130,7 +135,7 @@ static memcached_return_t textual_value_fetch(memcached_server_instance_st *ptr,
   if (end_ptr == string_ptr)
     goto read_error;
   for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
-  result->flags= (uint32_t) strtoul(next_ptr, &string_ptr, 10);
+  result->item_flags= (uint32_t) strtoul(next_ptr, &string_ptr, 10);
 
   if (end_ptr == string_ptr)
     goto read_error;
@@ -156,7 +161,7 @@ static memcached_return_t textual_value_fetch(memcached_server_instance_st *ptr,
   {
     string_ptr++;
     for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
-    result->cas= strtoull(next_ptr, &string_ptr, 10);
+    result->item_cas= strtoull(next_ptr, &string_ptr, 10);
   }
 
   if (end_ptr < string_ptr)
@@ -170,7 +175,7 @@ static memcached_return_t textual_value_fetch(memcached_server_instance_st *ptr,
     return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
   }
 
-  value_ptr= memcached_string_value(&result->value);
+  value_ptr= memcached_string_value_mutable(&result->value);
   /* 
     We read the \r\n into the string since not doing so is more 
     cycles then the waster of memory to do so.
@@ -191,7 +196,7 @@ static memcached_return_t textual_value_fetch(memcached_server_instance_st *ptr,
   /* This next bit blows the API, but this is internal....*/
   {
     char *char_ptr;
-    char_ptr= memcached_string_value(&result->value);;
+    char_ptr= memcached_string_value_mutable(&result->value);;
     char_ptr[value_length]= 0;
     char_ptr[value_length + 1]= 0;
     memcached_string_set_length(&result->value, value_length);
@@ -205,7 +210,7 @@ read_error:
   return MEMCACHED_PARTIAL_READ;
 }
 
-static memcached_return_t textual_read_one_response(memcached_server_instance_st *ptr,
+static memcached_return_t textual_read_one_response(memcached_server_write_instance_st ptr,
                                                     char *buffer, size_t buffer_length,
                                                     memcached_result_st *result)
 {
@@ -254,9 +259,9 @@ static memcached_return_t textual_read_one_response(memcached_server_instance_st
           memory in the struct, which is important, for something that
           rarely should happen?
         */
-        rel_ptr= (char *)ptr->root->call_realloc(ptr->root, 
-                                                 ptr->cached_server_error, 
-                                                 (size_t) (endptr - startptr + 1));
+        rel_ptr= (char *)libmemcached_realloc(ptr->root,
+                                              ptr->cached_server_error, 
+                                              (size_t) (endptr - startptr + 1));
 
         if (rel_ptr == NULL)
         {
@@ -322,7 +327,7 @@ static memcached_return_t textual_read_one_response(memcached_server_instance_st
   /* NOTREACHED */
 }
 
-static memcached_return_t binary_read_one_response(memcached_server_instance_st *ptr,
+static memcached_return_t binary_read_one_response(memcached_server_write_instance_st ptr,
                                                    char *buffer, size_t buffer_length,
                                                    memcached_result_st *result)
 {
@@ -359,17 +364,17 @@ static memcached_return_t binary_read_one_response(memcached_server_instance_st
       {
         uint16_t keylen= header.response.keylen;
         memcached_result_reset(result);
-        result->cas= header.response.cas;
+        result->item_cas= header.response.cas;
 
-        if (memcached_safe_read(ptr, &result->flags,
-                                sizeof (result->flags)) != MEMCACHED_SUCCESS)
+        if (memcached_safe_read(ptr, &result->item_flags,
+                                sizeof (result->item_flags)) != MEMCACHED_SUCCESS)
           return MEMCACHED_UNKNOWN_READ_FAILURE;
 
-        result->flags= ntohl(result->flags);
+        result->item_flags= ntohl(result->item_flags);
         bodylen -= header.response.extlen;
 
         result->key_length= keylen;
-        if (memcached_safe_read(ptr, result->key, keylen) != MEMCACHED_SUCCESS) 
+        if (memcached_safe_read(ptr, result->item_key, keylen) != MEMCACHED_SUCCESS) 
           return MEMCACHED_UNKNOWN_READ_FAILURE;
 
         bodylen -= keylen;
@@ -377,7 +382,7 @@ static memcached_return_t binary_read_one_response(memcached_server_instance_st
                                    bodylen) != MEMCACHED_SUCCESS) 
           return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
 
-        char *vptr= memcached_string_value(&result->value);
+        char *vptr= memcached_string_value_mutable(&result->value);
         if (memcached_safe_read(ptr, vptr, bodylen) != MEMCACHED_SUCCESS) 
           return MEMCACHED_UNKNOWN_READ_FAILURE;