X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_purge.c;h=c73e97ff9b2b9087936513b16f38a91ccd65854a;hb=a4edd02b7b976d5f5e011e9720ecf95352f3ca8a;hp=0fbd453ca9e48d03d9cceb5c44704a2130c84d74;hpb=771bda0119369f89c075c9575c882338e78387d5;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached_purge.c b/libmemcached/memcached_purge.c index 0fbd453c..c73e97ff 100644 --- a/libmemcached/memcached_purge.c +++ b/libmemcached/memcached_purge.c @@ -3,11 +3,13 @@ #include "common.h" #include "memcached_io.h" -void memcached_purge(memcached_server_st *ptr) +memcached_return memcached_purge(memcached_server_st *ptr) { + memcached_return rc; int32_t timeout; char buffer[2048]; memcached_result_st result; + memcached_result_st *result_ptr; if (ptr->root->purging || /* already purging */ (memcached_server_response_count(ptr) < ptr->root->io_msg_watermark && @@ -15,16 +17,19 @@ void memcached_purge(memcached_server_st *ptr) (ptr->io_bytes_sent > ptr->root->io_bytes_watermark && memcached_server_response_count(ptr) < 10)) { - return; + return MEMCACHED_SUCCESS; } /* memcached_io_write and memcached_response may call memcached_purge so we need to be able stop any recursion.. */ ptr->root->purging= 1; + WATCHPOINT_ASSERT(ptr->fd != -1); /* Force a flush of the buffer to ensure that we don't have the n-1 pending requests buffered up.. */ - memcached_io_write(ptr, NULL, 0, 1); + if (memcached_io_write(ptr, NULL, 0, 1) == -1) + return MEMCACHED_FAILURE; + WATCHPOINT_ASSERT(ptr->fd != -1); /* we have already incremented the response counter, and memcached_response will read out all messages.. To avoid memcached_response to wait forever @@ -36,8 +41,20 @@ void memcached_purge(memcached_server_st *ptr) timeout if there is no data yet */ timeout= ptr->root->poll_timeout; ptr->root->poll_timeout= 1; - memcached_response(ptr, buffer, sizeof(buffer), &result); + result_ptr= memcached_result_create(ptr->root, &result); + + if (result_ptr == NULL) + return MEMCACHED_FAILURE; + + WATCHPOINT_ASSERT(ptr->fd != -1); + rc= memcached_response(ptr, buffer, sizeof(buffer), &result); + WATCHPOINT_ERROR(rc); + WATCHPOINT_ASSERT(ptr->fd != -1); ptr->root->poll_timeout= timeout; memcached_server_response_increment(ptr); ptr->root->purging = 0; + + memcached_result_free(&result); + + return rc; }