From: Date: Fri, 29 Feb 2008 07:22:14 +0000 (-0800) Subject: Branch merge for fixes in reconnect. X-Git-Tag: _20~1^2~55^2~1^2~2 X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=2f58ddc89656a2367c20ab50cef8e2fc5f476319;hp=4012fdfefb1d0566398225cd280d9c3996960779;p=m6w6%2Flibmemcached Branch merge for fixes in reconnect. --- diff --git a/ChangeLog b/ChangeLog index f3cd040b..3a9e3afa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,12 @@ * Replication support has been added to the library. -0.17 +0.17 Wed Feb 27 03:33:29 PST 2008 * MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT added for connect timeout in non-block mode. * Incompatible change in memcached_behavior_set() api. We now use a uint64_t, instead of a pointer. + * Fix for storage of values for zero. + * memcached_server_cursor() function added to API for cycling through servers. 0.16 Mon Feb 18 00:30:25 PST 2008 * Work on the UDP protocol diff --git a/THANKS b/THANKS index 45809cec..35db5339 100644 --- a/THANKS +++ b/THANKS @@ -8,3 +8,4 @@ Tim Bunce - Perl Driver work and feedback on API Kevin Dalley - Bug Fixes Patrick Galbraith - work on C++ interface Ross McFarland - Idea for sorting servers. +Marcelo Fernandez - TCP/IP timeout pieces diff --git a/include/memcached.h b/include/memcached.h index 4a283ec6..1c80878d 100644 --- a/include/memcached.h +++ b/include/memcached.h @@ -264,7 +264,7 @@ memcached_return memcached_verbosity(memcached_st *ptr, unsigned int verbosity); void memcached_quit(memcached_st *ptr); char *memcached_strerror(memcached_st *ptr, memcached_return rc); memcached_return memcached_behavior_set(memcached_st *ptr, memcached_behavior flag, uint64_t data); -unsigned long long memcached_behavior_get(memcached_st *ptr, memcached_behavior flag); +uint64_t memcached_behavior_get(memcached_st *ptr, memcached_behavior flag); /* All of the functions for adding data to the server */ memcached_return memcached_set(memcached_st *ptr, char *key, size_t key_length, diff --git a/lib/memcached_connect.c b/lib/memcached_connect.c index 9d935e02..1b4a5fd5 100644 --- a/lib/memcached_connect.c +++ b/lib/memcached_connect.c @@ -1,4 +1,5 @@ #include "common.h" +#include static memcached_return set_hostinfo(memcached_server_st *server) { @@ -136,47 +137,6 @@ test_connect: { switch (errno) { case EINPROGRESS: - { - struct timeval tm = { ptr->root->connect_timeout, 0 }; - socklen_t len= sizeof(int); - fd_set wset; - int error=0, value; - - FD_ZERO(&wset); - FD_SET(ptr->fd, &wset); - - select(ptr->fd+1, NULL, &wset, NULL, &tm); - if (FD_ISSET(ptr->fd, &wset) != 0) - { - if (getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &value, &len) == 0) - { - if (value) - { - error= 1; - } - } - else - { - error= 1; - } - } - else - { - error= 1; - } - - if (error) - { - ptr->cached_errno= errno; - WATCHPOINT_ERRNO(ptr->cached_errno); - close(ptr->fd); - ptr->fd= -1; - return MEMCACHED_ERRNO; - } - - break; - } - /* We are spinning waiting on connect */ case EALREADY: case EINTR: goto test_connect; @@ -237,6 +197,27 @@ test_connect: /* We are spinning waiting on connect */ case EALREADY: case EINPROGRESS: + { + struct pollfd fds[1]; + int error; + + memset(&fds, 0, sizeof(struct pollfd)); + fds[0].fd= ptr->fd; + fds[0].events= POLLOUT | POLLERR; + error= poll(fds, 1, ptr->root->connect_timeout); + + if (error != 1) + { + ptr->cached_errno= errno; + WATCHPOINT_ERRNO(ptr->cached_errno); + close(ptr->fd); + ptr->fd= -1; + return MEMCACHED_ERRNO; + } + + break; + } + /* We are spinning waiting on connect */ case EINTR: goto test_connect; case EISCONN: /* We were spinning waiting on connect */ diff --git a/lib/memcached_storage.c b/lib/memcached_storage.c index 3b1ee242..2a0f88d4 100644 --- a/lib/memcached_storage.c +++ b/lib/memcached_storage.c @@ -58,9 +58,6 @@ static inline memcached_return memcached_send(memcached_st *ptr, unsigned int server_key; uint8_t replicas= 0; - WATCHPOINT_ASSERT(!(value == NULL && value_length > 0)); - WATCHPOINT_ASSERT(!(value && value_length == 0)); - unlikely (key_length == 0) return MEMCACHED_NO_KEY_PROVIDED; diff --git a/src/utilities.c b/src/utilities.c index 2094d218..2a63f9e5 100644 --- a/src/utilities.c +++ b/src/utilities.c @@ -75,7 +75,7 @@ void help_command(char *command_name, char *description, void process_hash_option(memcached_st *memc, char *opt_hash) { - unsigned int set; + uint64_t set; memcached_return rc; if (opt_hash == NULL) @@ -99,7 +99,7 @@ void process_hash_option(memcached_st *memc, char *opt_hash) exit(1); } - rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, &set); + rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, set); if (rc != MEMCACHED_SUCCESS) { fprintf(stderr, "hash: memcache error %s\n", memcached_strerror(memc, rc));