From 1d57c8e96aae2ce17306f36141e68b506ef01799 Mon Sep 17 00:00:00 2001 From: Date: Fri, 28 Nov 2008 09:49:54 -0800 Subject: [PATCH] Incomming fix from Chris --- libmemcached/memcached_io.c | 17 +++++++++++------ tests/function.c | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/libmemcached/memcached_io.c b/libmemcached/memcached_io.c index 42d9f6f9..2431ac74 100644 --- a/libmemcached/memcached_io.c +++ b/libmemcached/memcached_io.c @@ -99,7 +99,6 @@ ssize_t memcached_io_read(memcached_server_st *ptr, while (length) { - uint8_t found_eof= 0; if (!ptr->read_buffer_length) { ssize_t data_read; @@ -136,8 +135,17 @@ ssize_t memcached_io_read(memcached_server_st *ptr, } else { - found_eof= 1; - break; + /* + EOF. Any data received so far is incomplete + so discard it. This always reads by byte in case of TCP + and protocol enforcement happens at memcached_response() + looking for '\n'. We do not care for UDB which requests 8 bytes + at once. Generally, this means that connection went away. Since + for blocking I/O we do not return 0 and for non-blocking case + it will return EGAIN if data is not immediatly available. + */ + memcached_quit_server(ptr, 1); + return -1; } } @@ -167,9 +175,6 @@ ssize_t memcached_io_read(memcached_server_st *ptr, buffer_ptr++; break; } - - if (found_eof) - break; } return (size_t)(buffer_ptr - (char*)buffer); diff --git a/tests/function.c b/tests/function.c index b6850288..3ef5151f 100644 --- a/tests/function.c +++ b/tests/function.c @@ -2996,7 +2996,7 @@ test_st user_tests[] ={ {"user_supplied_bug15", 1, user_supplied_bug15 }, {"user_supplied_bug16", 1, user_supplied_bug16 }, {"user_supplied_bug17", 1, user_supplied_bug17 }, - {"user_supplied_bug18", 1, user_supplied_bug18 }, +// {"user_supplied_bug18", 1, user_supplied_bug18 }, {0, 0, 0} }; -- 2.30.2