projects
/
awesomized
/
libmemcached
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
Merge bzr://10.0.3.21/ Build: jenkins-Libmemcached-465
[awesomized/libmemcached]
/
libmemcached
/
io.cc
diff --git
a/libmemcached/io.cc
b/libmemcached/io.cc
index 448cc3255f63529adb2185a13fcda8a0edc860a1..e9d3ad39465b5838c8eac83cada203d46913582c 100644
(file)
--- a/
libmemcached/io.cc
+++ b/
libmemcached/io.cc
@@
-177,7
+177,7
@@
static bool process_input_buffer(memcached_instance_st* instance)
}
static memcached_return_t io_wait(memcached_instance_st* instance,
}
static memcached_return_t io_wait(memcached_instance_st* instance,
- const
memc_read_or_write read_or_write
)
+ const
short events
)
{
/*
** We are going to block on write, but at least on Solaris we might block
{
/*
** We are going to block on write, but at least on Solaris we might block
@@
-187,7
+187,7
@@
static memcached_return_t io_wait(memcached_instance_st* instance,
** The test is moved down in the purge function to avoid duplication of
** the test.
*/
** The test is moved down in the purge function to avoid duplication of
** the test.
*/
- if (
read_or_write == MEM_WRITE
)
+ if (
events & POLLOUT
)
{
if (memcached_purge(instance) == false)
{
{
if (memcached_purge(instance) == false)
{
@@
-197,12
+197,11
@@
static memcached_return_t io_wait(memcached_instance_st* instance,
struct pollfd fds;
fds.fd= instance->fd;
struct pollfd fds;
fds.fd= instance->fd;
- fds.events=
POLLIN
;
+ fds.events=
events
;
fds.revents= 0;
fds.revents= 0;
- if (
read_or_write == MEM_WRITE
) /* write */
+ if (
fds.events & POLLOUT
) /* write */
{
{
- fds.events= POLLOUT;
instance->io_wait_count.write++;
}
else
instance->io_wait_count.write++;
}
else
@@
-343,6
+342,7
@@
static bool io_flush(memcached_instance_st* instance,
}
ssize_t sent_length= ::send(instance->fd, local_write_ptr, write_length, flags);
}
ssize_t sent_length= ::send(instance->fd, local_write_ptr, write_length, flags);
+ int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno
if (sent_length == SOCKET_ERROR)
{
if (sent_length == SOCKET_ERROR)
{
@@
-371,7
+371,7
@@
static bool io_flush(memcached_instance_st* instance,
continue;
}
continue;
}
- memcached_return_t rc= io_wait(instance,
MEM_WRITE
);
+ memcached_return_t rc= io_wait(instance,
POLLOUT
);
if (memcached_success(rc))
{
continue;
if (memcached_success(rc))
{
continue;
@@
-382,14
+382,14
@@
static bool io_flush(memcached_instance_st* instance,
}
memcached_quit_server(instance, true);
}
memcached_quit_server(instance, true);
- error= memcached_set_errno(*instance,
get_socket_errno()
, MEMCACHED_AT);
+ error= memcached_set_errno(*instance,
local_errno
, MEMCACHED_AT);
return false;
}
case ENOTCONN:
case EPIPE:
default:
memcached_quit_server(instance, true);
return false;
}
case ENOTCONN:
case EPIPE:
default:
memcached_quit_server(instance, true);
- error= memcached_set_errno(*instance,
get_socket_errno()
, MEMCACHED_AT);
+ error= memcached_set_errno(*instance,
local_errno
, MEMCACHED_AT);
WATCHPOINT_ASSERT(instance->fd == INVALID_SOCKET);
return false;
}
WATCHPOINT_ASSERT(instance->fd == INVALID_SOCKET);
return false;
}
@@
-409,7
+409,12
@@
static bool io_flush(memcached_instance_st* instance,
memcached_return_t memcached_io_wait_for_write(memcached_instance_st* instance)
{
memcached_return_t memcached_io_wait_for_write(memcached_instance_st* instance)
{
- return io_wait(instance, MEM_WRITE);
+ return io_wait(instance, POLLOUT);
+}
+
+memcached_return_t memcached_io_wait_for_read(memcached_instance_st* instance)
+{
+ return io_wait(instance, POLLIN);
}
static memcached_return_t _io_fill(memcached_instance_st* instance)
}
static memcached_return_t _io_fill(memcached_instance_st* instance)
@@
-418,6
+423,8
@@
static memcached_return_t _io_fill(memcached_instance_st* instance)
do
{
data_read= ::recv(instance->fd, instance->read_buffer, MEMCACHED_MAX_BUFFER, MSG_NOSIGNAL);
do
{
data_read= ::recv(instance->fd, instance->read_buffer, MEMCACHED_MAX_BUFFER, MSG_NOSIGNAL);
+ int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno
+
if (data_read == SOCKET_ERROR)
{
switch (get_socket_errno())
if (data_read == SOCKET_ERROR)
{
switch (get_socket_errno())
@@
-435,7
+442,7
@@
static memcached_return_t _io_fill(memcached_instance_st* instance)
#endif
{
memcached_return_t io_wait_ret;
#endif
{
memcached_return_t io_wait_ret;
- if (memcached_success(io_wait_ret= io_wait(instance,
MEM_READ
)))
+ if (memcached_success(io_wait_ret= io_wait(instance,
POLLIN
)))
{
continue;
}
{
continue;
}
@@
-456,7
+463,7
@@
static memcached_return_t _io_fill(memcached_instance_st* instance)
case ECONNREFUSED:
default:
memcached_quit_server(instance, true);
case ECONNREFUSED:
default:
memcached_quit_server(instance, true);
- memcached_set_errno(*instance,
get_socket_errno()
, MEMCACHED_AT);
+ memcached_set_errno(*instance,
local_errno
, MEMCACHED_AT);
break;
}
break;
}
@@
-571,7
+578,7
@@
memcached_return_t memcached_io_slurp(memcached_instance_st* instance)
#ifdef __linux
case ERESTART:
#endif
#ifdef __linux
case ERESTART:
#endif
- if (memcached_success(io_wait(instance,
MEM_READ
)))
+ if (memcached_success(io_wait(instance,
POLLIN
)))
{
continue;
}
{
continue;
}