projects
/
awesomized
/
libmemcached
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
Fixed retry counter wrongly incremented in case of certain behavior change
[awesomized/libmemcached]
/
libmemcached
/
memcached_connect.c
diff --git
a/libmemcached/memcached_connect.c
b/libmemcached/memcached_connect.c
index fb79c80ad5d7296d900878a6e81406c80aa77a35..833ad0efba97f9b9eb126d7f177ab1bb4147aff9 100644
(file)
--- a/
libmemcached/memcached_connect.c
+++ b/
libmemcached/memcached_connect.c
@@
-81,12
+81,13
@@
static memcached_return set_socket_options(memcached_server_st *ptr)
}
#endif
}
#endif
+ if (ptr->root->flags & MEM_NO_BLOCK)
{
int error;
struct linger linger;
linger.l_onoff= 1;
{
int error;
struct linger linger;
linger.l_onoff= 1;
- linger.l_linger=
MEMCACHED_DEFAULT_TIMEOUT;
+ linger.l_linger=
0; /* By default on close() just drop the socket */
error= setsockopt(ptr->fd, SOL_SOCKET, SO_LINGER,
&linger, (socklen_t)sizeof(struct linger));
WATCHPOINT_ASSERT(error == 0);
error= setsockopt(ptr->fd, SOL_SOCKET, SO_LINGER,
&linger, (socklen_t)sizeof(struct linger));
WATCHPOINT_ASSERT(error == 0);
@@
-152,7
+153,7
@@
static memcached_return unix_socket_connect(memcached_server_st *ptr)
servAddr.sun_family= AF_UNIX;
strcpy(servAddr.sun_path, ptr->hostname); /* Copy filename */
servAddr.sun_family= AF_UNIX;
strcpy(servAddr.sun_path, ptr->hostname); /* Copy filename */
- addrlen=
strlen(servAddr.sun_path) + sizeof(servAddr.sun_family
);
+ addrlen=
(socklen_t) (strlen(servAddr.sun_path) + sizeof(servAddr.sun_family)
);
test_connect:
if (connect(ptr->fd,
test_connect:
if (connect(ptr->fd,
@@
-218,7
+219,7
@@
static memcached_return network_connect(memcached_server_st *ptr)
(void)set_socket_options(ptr);
(void)set_socket_options(ptr);
- int flags;
+ int flags
= 0
;
if (ptr->root->connect_timeout)
{
flags= fcntl(ptr->fd, F_GETFL, 0);
if (ptr->root->connect_timeout)
{
flags= fcntl(ptr->fd, F_GETFL, 0);
@@
-234,7
+235,9
@@
static memcached_return network_connect(memcached_server_st *ptr)
if (errno == EINPROGRESS || /* nonblocking mode - first return, */
errno == EALREADY) /* nonblocking mode - subsequent returns */
{
if (errno == EINPROGRESS || /* nonblocking mode - first return, */
errno == EALREADY) /* nonblocking mode - subsequent returns */
{
- struct pollfd fds[1] = { [0].fd = ptr->fd, [0].events = POLLOUT };
+ struct pollfd fds[1];
+ fds[0].fd = ptr->fd;
+ fds[0].events = POLLOUT;
int error= poll(fds, 1, ptr->root->connect_timeout);
if (error != 1 || fds[0].revents & POLLERR)
int error= poll(fds, 1, ptr->root->connect_timeout);
if (error != 1 || fds[0].revents & POLLERR)
@@
-242,7
+245,7
@@
static memcached_return network_connect(memcached_server_st *ptr)
if (fds[0].revents & POLLERR)
{
int err;
if (fds[0].revents & POLLERR)
{
int err;
-
in
t len = sizeof (err);
+
socklen_
t len = sizeof (err);
(void)getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &err, &len);
ptr->cached_errno= (err == 0) ? errno : err;
}
(void)getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &err, &len);
ptr->cached_errno= (err == 0) ? errno : err;
}
@@
-304,6
+307,7
@@
memcached_return memcached_connect(memcached_server_st *ptr)
LIBMEMCACHED_MEMCACHED_CONNECT_START();
/* both retry_timeout and server_failure_limit must be set in order to delay retrying a server on error. */
LIBMEMCACHED_MEMCACHED_CONNECT_START();
/* both retry_timeout and server_failure_limit must be set in order to delay retrying a server on error. */
+ WATCHPOINT_ASSERT(ptr->root);
if (ptr->root->retry_timeout && ptr->root->server_failure_limit)
{
struct timeval next_time;
if (ptr->root->retry_timeout && ptr->root->server_failure_limit)
{
struct timeval next_time;