Fix OSX failure, and have memcached_do just use memcached_vdo
authorBrian Aker <brian@tangent.org>
Fri, 16 Dec 2011 00:19:33 +0000 (16:19 -0800)
committerBrian Aker <brian@tangent.org>
Fri, 16 Dec 2011 00:19:33 +0000 (16:19 -0800)
libmemcached/auto.cc
libmemcached/do.cc
libmemcached/io.cc
tests/libmemcached-1.0/parser.cc

index b2e4f534def078ece54f55682561b3b0eb765eac..507ae366d52cddbd0de2aa1dba4a2850939add33 100644 (file)
@@ -71,7 +71,9 @@ static memcached_return_t text_incr_decr(memcached_st *ptr,
 
   memcached_return_t rc= memcached_do(instance, buffer, (size_t)send_length, true);
   if (no_reply or memcached_failed(rc))
+  {
     return rc;
+  }
 
   rc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
 
index c3cfab9389b4339dfc8c0e5d49aeb3210223d550..99dba559f2b6f2a4fdbb44e4ed91e33a2ed07a3f 100644 (file)
 
 #include <libmemcached/common.h>
 
-memcached_return_t memcached_do(memcached_server_write_instance_st ptr, const void *command,
-                                size_t command_length, bool with_flush)
+memcached_return_t memcached_do(memcached_server_write_instance_st ptr,
+                                const void *command,
+                                size_t command_length,
+                                bool with_flush)
 {
   assert_msg(command_length, "Programming error, somehow a command had a length of zero");
   assert_msg(command, "Programming error, somehow a command was NULL");
 
-  memcached_return_t rc;
-  if (memcached_failed(rc= memcached_connect(ptr)))
-  {
-    WATCHPOINT_ASSERT(rc == memcached_last_error(ptr->root));
-    WATCHPOINT_ERROR(rc);
-    return rc;
-  }
-
-  /*
-  ** Since non buffering ops in UDP mode dont check to make sure they will fit
-  ** before they start writing, if there is any data in buffer, clear it out,
-  ** otherwise we might get a partial write.
-  **/
-  if (memcached_is_udp(ptr->root) and with_flush and ptr->write_buffer_offset > UDP_DATAGRAM_HEADER_LENGTH)
-  {
-    memcached_io_write(ptr, NULL, 0, true);
-  }
+  libmemcached_io_vector_st vector[1]= { { command, command_length } };
 
-  ssize_t sent_length= memcached_io_write(ptr, command, command_length, with_flush);
-
-  if (sent_length == -1 or size_t(sent_length) != command_length)
-  {
-    rc= MEMCACHED_WRITE_FAILURE;
-  }
-  else if ((ptr->root->flags.no_reply) == 0)
-  {
-    memcached_server_response_increment(ptr);
-  }
-
-  return rc;
+  return memcached_vdo(ptr, vector, 1, with_flush);
 }
 
 memcached_return_t memcached_vdo(memcached_server_write_instance_st ptr,
-                                 const struct libmemcached_io_vector_st *vector, size_t count,
+                                 const struct libmemcached_io_vector_st *vector,
+                                 size_t count,
                                  bool with_flush)
 {
   memcached_return_t rc;
index 85e5ed42b82460a69d6c6b364b0af682ed189919..22cd474c4b2b5eabb7850451db9d4276b4117945 100644 (file)
@@ -354,11 +354,11 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
     WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET);
     if (with_flush)
     {
-      sent_length= send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT);
+      sent_length= ::send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT);
     }
     else
     {
-      sent_length= send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT|MSG_MORE);
+      sent_length= ::send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT|MSG_MORE);
     }
 
     if (sent_length == SOCKET_ERROR)
index 32b0d9d84c0ff15c7b1bdcf301f2277c66c855fa..03da195a5c7afab2022bebce15c40362610b8feb 100644 (file)
@@ -762,7 +762,11 @@ test_return_t regression_bug_71231153_poll(memcached_st *)
     char *value= memcached_get(memc, test_literal_param("test"), &value_len, NULL, &rc);
     test_false(value);
     test_zero(value_len);
+#ifdef __APPLE__
+    test_compare_got(MEMCACHED_CONNECTION_FAILURE, rc, memcached_last_error_message(memc));
+#else
     test_compare_got(MEMCACHED_TIMEOUT, rc, memcached_last_error_message(memc));
+#endif
 
     memcached_free(memc);
   }