X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_io.c;h=47486d3095b799872a6943004c23821af525c7b9;hb=7fe9d9a3c8e127ab12c4830e44fd931adb262e25;hp=ea8b25816d9d981fce5f4d40cc29f3cc0a84be2f;hpb=933e5a561b10c1450563f1421b83d72396b805d2;p=m6w6%2Flibmemcached diff --git a/libmemcached/memcached_io.c b/libmemcached/memcached_io.c index ea8b2581..47486d30 100644 --- a/libmemcached/memcached_io.c +++ b/libmemcached/memcached_io.c @@ -204,14 +204,23 @@ ssize_t memcached_io_write(memcached_server_st *ptr, return original_length; } -memcached_return memcached_io_close(memcached_server_st *ptr, uint8_t io_death) +memcached_return memcached_io_close(memcached_server_st *ptr) { + int r; /* in case of death shutdown to avoid blocking at close() */ - if (io_death) - shutdown(ptr->fd, SHUT_RDWR); - else - close(ptr->fd); + r= shutdown(ptr->fd, SHUT_RDWR); + +#ifdef HAVE_DEBUG + if (r && errno != ENOTCONN) + { + WATCHPOINT_ERRNO(errno); + WATCHPOINT_ASSERT(errno); + } +#endif + + r= close(ptr->fd); + WATCHPOINT_ASSERT(r == 0); return MEMCACHED_SUCCESS; } @@ -219,7 +228,7 @@ memcached_return memcached_io_close(memcached_server_st *ptr, uint8_t io_death) static ssize_t io_flush(memcached_server_st *ptr, memcached_return *error) { - size_t sent_length; + ssize_t sent_length; size_t return_length; char *local_write_ptr= ptr->write_buffer; size_t write_length= ptr->write_buffer_offset; @@ -230,9 +239,11 @@ static ssize_t io_flush(memcached_server_st *ptr, return 0; /* Looking for memory overflows */ +#if defined(HAVE_DEBUG) if (write_length == MEMCACHED_MAX_BUFFER) WATCHPOINT_ASSERT(ptr->write_buffer == local_write_ptr); WATCHPOINT_ASSERT((ptr->write_buffer + MEMCACHED_MAX_BUFFER) >= (local_write_ptr + write_length)); +#endif return_length= 0; while (write_length) @@ -269,7 +280,7 @@ static ssize_t io_flush(memcached_server_st *ptr, } else { - if ((ssize_t)(sent_length= write(ptr->fd, local_write_ptr, + if ((sent_length= write(ptr->fd, local_write_ptr, write_length)) == -1) { switch (errno)