uint16_t flags,
memcached_storage_action verb)
{
+ char to_write;
size_t write_length;
ssize_t sent_length;
memcached_return rc;
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
unsigned int server_key;
- assert(value);
- assert(value_length);
+ WATCHPOINT_ASSERT(value);
+ WATCHPOINT_ASSERT(value_length);
- memset(buffer, 0, MEMCACHED_DEFAULT_COMMAND_SIZE);
+ /* Leaving this WATCHPOINT_ASSERT in since only a library fubar could blow this */
+#ifdef NOT_DONE
+ if (!(ptr->flags & MEM_NO_BLOCK) && ptr->write_buffer_offset != 0)
+ WATCHPOINT_ASSERT(0);
+#endif
+
+ server_key= memcached_generate_hash(ptr, key, key_length);
- rc= memcached_connect(ptr);
+ rc= memcached_connect(ptr, server_key);
if (rc != MEMCACHED_SUCCESS)
return rc;
- /* Leaveing this assert in since only a library fubar could blow this */
- assert(ptr->write_buffer_offset == 0);
-
- server_key= memcached_generate_hash(ptr, key, key_length);
-
write_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
"%s %.*s %x %llu %zu\r\n", storage_op_string(verb),
(int)key_length, key, flags,
We have to flush after sending the command. Memcached is not smart enough
to just keep reading from the socket :(
*/
- if ((sent_length= memcached_io_write(ptr, server_key, buffer, write_length, 1)) == -1)
+ if ((sent_length= memcached_io_write(ptr, server_key, buffer, write_length, 0)) == -1)
{
rc= MEMCACHED_WRITE_FAILURE;
goto error;
goto error;
}
- if ((sent_length= memcached_io_write(ptr, server_key, "\r\n", 2, 1)) == -1)
+ if ((ptr->flags & MEM_NO_BLOCK) && verb == SET_OP)
+ to_write= 0;
+ else
+ to_write= 1;
+
+ if ((sent_length= memcached_io_write(ptr, server_key, "\r\n", 2, to_write)) == -1)
{
+ memcached_quit_server(ptr, server_key);
rc= MEMCACHED_WRITE_FAILURE;
goto error;
}
if ((ptr->flags & MEM_NO_BLOCK) && verb == SET_OP)
{
rc= MEMCACHED_SUCCESS;
- ptr->stack_responses++;
+ memcached_server_response_increment(ptr, server_key);
}
else
{