- if (ptr->root->flags & MEM_BINARY_PROTOCOL)
- return binary_response(ptr, buffer, buffer_length, result);
-
- max_messages= memcached_server_response_count(ptr);
- for (x= 0; x < max_messages; x++)
- {
- size_t total_length= 0;
- buffer_ptr= buffer;
-
-
- while (1)
- {
- ssize_t read_length;
-
- read_length= memcached_io_read(ptr, buffer_ptr, 1);
- WATCHPOINT_ASSERT(*buffer_ptr != '\0');
+ /*
+ * The previous implementation purged all pending requests and just
+ * returned the last one. Purge all pending messages to ensure backwards
+ * compatibility.
+ */
+ if ((ptr->root->flags & MEM_BINARY_PROTOCOL) == 0)
+ while (memcached_server_response_count(ptr) > 1) {
+ memcached_return rc= memcached_read_one_response(ptr, buffer, buffer_length, result);
+
+ unlikely (rc != MEMCACHED_END &&
+ rc != MEMCACHED_STORED &&
+ rc != MEMCACHED_SUCCESS &&
+ rc != MEMCACHED_STAT &&
+ rc != MEMCACHED_DELETED &&
+ rc != MEMCACHED_NOTFOUND &&
+ rc != MEMCACHED_NOTSTORED &&
+ rc != MEMCACHED_DATA_EXISTS)
+ return rc;
+ }