Modifying behavior to bounce connection in the case of a bad value from
author <brian@gir-2.local> <>
Wed, 6 Feb 2008 04:25:16 +0000 (20:25 -0800)
committer <brian@gir-2.local> <>
Wed, 6 Feb 2008 04:25:16 +0000 (20:25 -0800)
memcached.

lib/memcached_fetch.c
lib/memcached_io.c
lib/memcached_response.c

index 19f60870bc9d49408342f8bd1101efd9e564711e..96363684ea4b09fc2abba900a2c023b3594ebed1 100644 (file)
@@ -117,6 +117,8 @@ memcached_return value_fetch(memcached_server_st *ptr,
   return MEMCACHED_SUCCESS;
 
 read_error:
+  memcached_io_reset(ptr);
+
   return MEMCACHED_PARTIAL_READ;
 }
 
index d9e2602de3b7555717f1617ca552d86ef5f28101..3b5b25afa026bfb5abdce9e047746aca509382cb 100644 (file)
@@ -309,6 +309,5 @@ static ssize_t io_flush(memcached_server_st *ptr,
 */
 void memcached_io_reset(memcached_server_st *ptr)
 {
-  ptr->write_buffer_offset= 0;
   memcached_quit_server(ptr, 0);
 }
index 31b5911737f2820a39d4d1f36c0ab55c9e23e344..33dc0b1e5bfd41d9c28bb41d061028ab313fa619 100644 (file)
@@ -49,7 +49,10 @@ memcached_return memcached_response(memcached_server_st *ptr,
       WATCHPOINT_ASSERT(isgraph(*buffer_ptr) || isspace(*buffer_ptr));
 
       if (read_length != 1)
+      {
+        memcached_io_reset(ptr);
         return  MEMCACHED_UNKNOWN_READ_FAILURE;
+      }
 
       if (*buffer_ptr == '\n')
         break;
@@ -60,7 +63,10 @@ memcached_return memcached_response(memcached_server_st *ptr,
       WATCHPOINT_ASSERT(total_length <= buffer_length);
 
       if (total_length >= buffer_length)
+      {
+        memcached_io_reset(ptr);
         return MEMCACHED_PROTOCOL_ERROR;
+      }
     }
     buffer_ptr++;
     *buffer_ptr= 0;
@@ -92,6 +98,7 @@ memcached_return memcached_response(memcached_server_st *ptr,
     {
       WATCHPOINT_STRING(buffer);
       WATCHPOINT_ASSERT(0);
+      memcached_io_reset(ptr);
       return MEMCACHED_UNKNOWN_READ_FAILURE;
     }
   case 'O': /* OK */
@@ -111,6 +118,7 @@ memcached_return memcached_response(memcached_server_st *ptr,
       {
         WATCHPOINT_STRING(buffer);
         WATCHPOINT_ASSERT(0);
+        memcached_io_reset(ptr);
         return MEMCACHED_UNKNOWN_READ_FAILURE;
       }
     }
@@ -123,20 +131,31 @@ memcached_return memcached_response(memcached_server_st *ptr,
       else if (buffer[4] == 'S')
         return MEMCACHED_NOTSTORED;
       else
+      {
+        memcached_io_reset(ptr);
         return MEMCACHED_UNKNOWN_READ_FAILURE;
+      }
     }
   case 'E': /* PROTOCOL ERROR or END */
     {
       if (buffer[1] == 'N')
         return MEMCACHED_END;
       else if (buffer[1] == 'R')
+      {
+        memcached_io_reset(ptr);
         return MEMCACHED_PROTOCOL_ERROR;
+      }
       else
+      {
+        memcached_io_reset(ptr);
         return MEMCACHED_UNKNOWN_READ_FAILURE;
+      }
     }
   case 'C': /* CLIENT ERROR */
+    memcached_io_reset(ptr);
     return MEMCACHED_CLIENT_ERROR;
   default:
+    memcached_io_reset(ptr);
     return MEMCACHED_UNKNOWN_READ_FAILURE;
 
   }