Bad data for threads (Toru patch)
[m6w6/libmemcached] / libmemcached / memcached_io.c
index b9261f3d9bc4ef27540f5799e702a538032aca31..93ca41732d4ca26741c2c905e10e9ea001795e15 100644 (file)
@@ -158,10 +158,10 @@ ssize_t memcached_io_read(memcached_server_st *ptr,
 }
 
 ssize_t memcached_io_write(memcached_server_st *ptr,
-                           char *buffer, size_t length, char with_flush)
+                           const char *buffer, size_t length, char with_flush)
 {
   size_t original_length;
-  char* buffer_ptr;
+  const char* buffer_ptr;
 
   original_length= length;
   buffer_ptr= buffer;
@@ -204,9 +204,14 @@ ssize_t memcached_io_write(memcached_server_st *ptr,
   return original_length;
 }
 
-memcached_return memcached_io_close(memcached_server_st *ptr)
+memcached_return memcached_io_close(memcached_server_st *ptr, uint8_t io_death)
 {
-  close(ptr->fd);
+  /* in case of death shutdown to avoid blocking at close() */
+
+  if (io_death)
+    shutdown(ptr->fd, SHUT_RDWR);
+  else
+    close(ptr->fd);
 
   return MEMCACHED_SUCCESS;
 }