projects
/
awesomized
/
libmemcached
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
Clean up some library usage.
[awesomized/libmemcached]
/
libmemcached
/
io.cc
diff --git
a/libmemcached/io.cc
b/libmemcached/io.cc
index 20233c7dc665cc668f524dfe56d03e25acac25a9..8796d5034b8a2dd82927443662e32918579dab58 100644
(file)
--- a/
libmemcached/io.cc
+++ b/
libmemcached/io.cc
@@
-40,10
+40,10
@@
#include <libmemcached/common.h>
#ifdef HAVE_SYS_SOCKET_H
#include <libmemcached/common.h>
#ifdef HAVE_SYS_SOCKET_H
-#
include <sys/socket.h>
+# include <sys/socket.h>
#endif
#endif
-void initialize_binary_request(
org::libmemcached::Instance
* server, protocol_binary_request_header& header)
+void initialize_binary_request(
memcached_instance_st
* server, protocol_binary_request_header& header)
{
server->request_id++;
header.request.magic= PROTOCOL_BINARY_REQ;
{
server->request_id++;
header.request.magic= PROTOCOL_BINARY_REQ;
@@
-61,7
+61,7
@@
enum memc_read_or_write {
*
* @param instance the server to pack
*/
*
* @param instance the server to pack
*/
-static bool repack_input_buffer(
org::libmemcached::Instance
* instance)
+static bool repack_input_buffer(
memcached_instance_st
* instance)
{
if (instance->read_ptr != instance->read_buffer)
{
{
if (instance->read_ptr != instance->read_buffer)
{
@@
-99,7
+99,7
@@
static bool repack_input_buffer(org::libmemcached::Instance* instance)
case EWOULDBLOCK:
#endif
case EAGAIN:
case EWOULDBLOCK:
#endif
case EAGAIN:
-#ifdef
TARGET_OS_LINUX
+#ifdef
__linux
case ERESTART:
#endif
break; // No IO is fine, we can just move on
case ERESTART:
#endif
break; // No IO is fine, we can just move on
@@
-134,7
+134,7
@@
static bool repack_input_buffer(org::libmemcached::Instance* instance)
* @param instance the server to star processing iput messages for
* @return true if we processed anything, false otherwise
*/
* @param instance the server to star processing iput messages for
* @return true if we processed anything, false otherwise
*/
-static bool process_input_buffer(
org::libmemcached::Instance
* instance)
+static bool process_input_buffer(
memcached_instance_st
* instance)
{
/*
** We might be able to process some of the response messages if we
{
/*
** We might be able to process some of the response messages if we
@@
-176,8
+176,8
@@
static bool process_input_buffer(org::libmemcached::Instance* instance)
return false;
}
return false;
}
-static memcached_return_t io_wait(
org::libmemcached::Instance
* instance,
- const
memc_read_or_write read_or_write
)
+static memcached_return_t io_wait(
memcached_instance_st
* instance,
+ 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(org::libmemcached::Instance* 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(org::libmemcached::Instance* 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
@@
-212,8
+211,7
@@
static memcached_return_t io_wait(org::libmemcached::Instance* instance,
if (instance->root->poll_timeout == 0) // Mimic 0 causes timeout behavior (not all platforms do this)
{
if (instance->root->poll_timeout == 0) // Mimic 0 causes timeout behavior (not all platforms do this)
{
- instance->io_wait_count.timeouts++;
- return memcached_set_error(*instance, MEMCACHED_TIMEOUT, MEMCACHED_AT);
+ return memcached_set_error(*instance, MEMCACHED_TIMEOUT, MEMCACHED_AT, memcached_literal_param("poll_timeout() was set to zero"));
}
size_t loop_max= 5;
}
size_t loop_max= 5;
@@
-258,8
+256,7
@@
static memcached_return_t io_wait(org::libmemcached::Instance* instance,
if (active_fd == 0)
{
if (active_fd == 0)
{
- instance->io_wait_count.timeouts++;
- return memcached_set_error(*instance, MEMCACHED_TIMEOUT, MEMCACHED_AT);
+ return memcached_set_error(*instance, MEMCACHED_TIMEOUT, MEMCACHED_AT, memcached_literal_param("No active_fd were found"));
}
// Only an error should result in this code being called.
}
// Only an error should result in this code being called.
@@
-267,7
+264,7
@@
static memcached_return_t io_wait(org::libmemcached::Instance* instance,
assert_msg(active_fd == -1 , "poll() returned an unexpected value");
switch (local_errno)
{
assert_msg(active_fd == -1 , "poll() returned an unexpected value");
switch (local_errno)
{
-#ifdef
TARGET_OS_LINUX
+#ifdef
__linux
case ERESTART:
#endif
case EINTR:
case ERESTART:
#endif
case EINTR:
@@
-298,7
+295,7
@@
static memcached_return_t io_wait(org::libmemcached::Instance* instance,
memcached_literal_param("number of attempts to call io_wait() failed"));
}
memcached_literal_param("number of attempts to call io_wait() failed"));
}
-static bool io_flush(
org::libmemcached::Instance
* instance,
+static bool io_flush(
memcached_instance_st
* instance,
const bool with_flush,
memcached_return_t& error)
{
const bool with_flush,
memcached_return_t& error)
{
@@
-373,7
+370,7
@@
static bool io_flush(org::libmemcached::Instance* 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;
@@
-409,12
+406,17
@@
static bool io_flush(org::libmemcached::Instance* instance,
return true;
}
return true;
}
-memcached_return_t memcached_io_wait_for_write(
org::libmemcached::Instance
* instance)
+memcached_return_t memcached_io_wait_for_write(
memcached_instance_st
* instance)
{
{
- return io_wait(instance,
MEM_WRITE
);
+ return io_wait(instance,
POLLOUT
);
}
}
-static memcached_return_t _io_fill(org::libmemcached::Instance* instance)
+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)
{
ssize_t data_read;
do
{
ssize_t data_read;
do
@@
-432,12
+434,12
@@
static memcached_return_t _io_fill(org::libmemcached::Instance* instance)
case EWOULDBLOCK:
#endif
case EAGAIN:
case EWOULDBLOCK:
#endif
case EAGAIN:
-#ifdef
TARGET_OS_LINUX
+#ifdef
__linux
case ERESTART:
#endif
{
memcached_return_t io_wait_ret;
case ERESTART:
#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;
}
@@
-490,7
+492,7
@@
static memcached_return_t _io_fill(org::libmemcached::Instance* instance)
return MEMCACHED_SUCCESS;
}
return MEMCACHED_SUCCESS;
}
-memcached_return_t memcached_io_read(
org::libmemcached::Instance
* instance,
+memcached_return_t memcached_io_read(
memcached_instance_st
* instance,
void *buffer, size_t length, ssize_t& nread)
{
assert(memcached_is_udp(instance->root) == false);
void *buffer, size_t length, ssize_t& nread)
{
assert(memcached_is_udp(instance->root) == false);
@@
-542,7
+544,7
@@
memcached_return_t memcached_io_read(org::libmemcached::Instance* instance,
return MEMCACHED_SUCCESS;
}
return MEMCACHED_SUCCESS;
}
-memcached_return_t memcached_io_slurp(
org::libmemcached::Instance
* instance)
+memcached_return_t memcached_io_slurp(
memcached_instance_st
* instance)
{
assert_msg(instance, "Programmer error, invalid Instance");
assert(memcached_is_udp(instance->root) == false);
{
assert_msg(instance, "Programmer error, invalid Instance");
assert(memcached_is_udp(instance->root) == false);
@@
-570,10
+572,10
@@
memcached_return_t memcached_io_slurp(org::libmemcached::Instance* instance)
case EWOULDBLOCK:
#endif
case EAGAIN:
case EWOULDBLOCK:
#endif
case EAGAIN:
-#ifdef
TARGET_OS_LINUX
+#ifdef
__linux
case ERESTART:
#endif
case ERESTART:
#endif
- if (memcached_success(io_wait(instance,
MEM_READ
)))
+ if (memcached_success(io_wait(instance,
POLLIN
)))
{
continue;
}
{
continue;
}
@@
-599,7
+601,7
@@
memcached_return_t memcached_io_slurp(org::libmemcached::Instance* instance)
return MEMCACHED_CONNECTION_FAILURE;
}
return MEMCACHED_CONNECTION_FAILURE;
}
-static bool _io_write(
org::libmemcached::Instance
* instance,
+static bool _io_write(
memcached_instance_st
* instance,
const void *buffer, size_t length, bool with_flush,
size_t& written)
{
const void *buffer, size_t length, bool with_flush,
size_t& written)
{
@@
-652,13
+654,13
@@
static bool _io_write(org::libmemcached::Instance* instance,
return true;
}
return true;
}
-bool memcached_io_write(
org::libmemcached::Instance
* instance)
+bool memcached_io_write(
memcached_instance_st
* instance)
{
size_t written;
return _io_write(instance, NULL, 0, true, written);
}
{
size_t written;
return _io_write(instance, NULL, 0, true, written);
}
-ssize_t memcached_io_write(
org::libmemcached::Instance
* instance,
+ssize_t memcached_io_write(
memcached_instance_st
* instance,
const void *buffer, const size_t length, const bool with_flush)
{
size_t written;
const void *buffer, const size_t length, const bool with_flush)
{
size_t written;
@@
-671,7
+673,7
@@
ssize_t memcached_io_write(org::libmemcached::Instance* instance,
return ssize_t(written);
}
return ssize_t(written);
}
-bool memcached_io_writev(
org::libmemcached::Instance
* instance,
+bool memcached_io_writev(
memcached_instance_st
* instance,
libmemcached_io_vector_st vector[],
const size_t number_of, const bool with_flush)
{
libmemcached_io_vector_st vector[],
const size_t number_of, const bool with_flush)
{
@@
-703,7
+705,7
@@
bool memcached_io_writev(org::libmemcached::Instance* instance,
return (complete_total == total);
}
return (complete_total == total);
}
-void
org::libmemcached::Instance
::start_close_socket()
+void
memcached_instance_st
::start_close_socket()
{
if (fd != INVALID_SOCKET)
{
{
if (fd != INVALID_SOCKET)
{
@@
-712,24
+714,35
@@
void org::libmemcached::Instance::start_close_socket()
}
}
}
}
-void
org::libmemcached::Instance::close
_socket()
+void
memcached_instance_st::reset
_socket()
{
if (fd != INVALID_SOCKET)
{
{
if (fd != INVALID_SOCKET)
{
+ (void)closesocket(fd);
+ fd= INVALID_SOCKET;
+ }
+}
+
+void memcached_instance_st::close_socket()
+{
+ if (fd != INVALID_SOCKET)
+ {
+ int shutdown_options= SHUT_RD;
+ if (options.is_shutting_down == false)
+ {
+ shutdown_options= SHUT_RDWR;
+ }
+
/* in case of death shutdown to avoid blocking at close() */
/* in case of death shutdown to avoid blocking at close() */
- if (shutdown(fd,
SHUT_RD
) == SOCKET_ERROR and get_socket_errno() != ENOTCONN)
+ if (shutdown(fd,
shutdown_options
) == SOCKET_ERROR and get_socket_errno() != ENOTCONN)
{
WATCHPOINT_NUMBER(fd);
WATCHPOINT_ERRNO(get_socket_errno());
WATCHPOINT_ASSERT(get_socket_errno());
}
{
WATCHPOINT_NUMBER(fd);
WATCHPOINT_ERRNO(get_socket_errno());
WATCHPOINT_ASSERT(get_socket_errno());
}
- if (closesocket(fd) == SOCKET_ERROR)
- {
- WATCHPOINT_ERRNO(get_socket_errno());
- }
+ reset_socket();
state= MEMCACHED_SERVER_STATE_NEW;
state= MEMCACHED_SERVER_STATE_NEW;
- fd= INVALID_SOCKET;
}
state= MEMCACHED_SERVER_STATE_NEW;
}
state= MEMCACHED_SERVER_STATE_NEW;
@@
-746,7
+759,7
@@
void org::libmemcached::Instance::close_socket()
major_version= minor_version= micro_version= UINT8_MAX;
}
major_version= minor_version= micro_version= UINT8_MAX;
}
-
org::libmemcached::Instance
* memcached_io_get_readable_server(Memcached *memc, memcached_return_t&)
+
memcached_instance_st
* memcached_io_get_readable_server(Memcached *memc, memcached_return_t&)
{
#define MAX_SERVERS_TO_POLL 100
struct pollfd fds[MAX_SERVERS_TO_POLL];
{
#define MAX_SERVERS_TO_POLL 100
struct pollfd fds[MAX_SERVERS_TO_POLL];
@@
-754,7
+767,7
@@
org::libmemcached::Instance* memcached_io_get_readable_server(Memcached *memc, m
for (uint32_t x= 0; x < memcached_server_count(memc) and host_index < MAX_SERVERS_TO_POLL; ++x)
{
for (uint32_t x= 0; x < memcached_server_count(memc) and host_index < MAX_SERVERS_TO_POLL; ++x)
{
-
org::libmemcached::Instance
* instance= memcached_instance_fetch(memc, x);
+
memcached_instance_st
* instance= memcached_instance_fetch(memc, x);
if (instance->read_buffer_length > 0) /* I have data in the buffer */
{
if (instance->read_buffer_length > 0) /* I have data in the buffer */
{
@@
-775,7
+788,7
@@
org::libmemcached::Instance* memcached_io_get_readable_server(Memcached *memc, m
/* We have 0 or 1 server with pending events.. */
for (uint32_t x= 0; x< memcached_server_count(memc); ++x)
{
/* We have 0 or 1 server with pending events.. */
for (uint32_t x= 0; x< memcached_server_count(memc); ++x)
{
-
org::libmemcached::Instance
* instance= memcached_instance_fetch(memc, x);
+
memcached_instance_st
* instance= memcached_instance_fetch(memc, x);
if (instance->response_count() > 0)
{
if (instance->response_count() > 0)
{
@@
-802,7
+815,7
@@
org::libmemcached::Instance* memcached_io_get_readable_server(Memcached *memc, m
{
for (uint32_t y= 0; y < memcached_server_count(memc); ++y)
{
{
for (uint32_t y= 0; y < memcached_server_count(memc); ++y)
{
-
org::libmemcached::Instance
* instance= memcached_instance_fetch(memc, y);
+
memcached_instance_st
* instance= memcached_instance_fetch(memc, y);
if (instance->fd == fds[x].fd)
{
if (instance->fd == fds[x].fd)
{
@@
-819,7
+832,7
@@
org::libmemcached::Instance* memcached_io_get_readable_server(Memcached *memc, m
/*
Eventually we will just kill off the server with the problem.
*/
/*
Eventually we will just kill off the server with the problem.
*/
-void memcached_io_reset(
org::libmemcached::Instance
* instance)
+void memcached_io_reset(
memcached_instance_st
* instance)
{
memcached_quit_server(instance, true);
}
{
memcached_quit_server(instance, true);
}
@@
-828,7
+841,7
@@
void memcached_io_reset(org::libmemcached::Instance* instance)
* Read a given number of bytes from the server and place it into a specific
* buffer. Reset the IO channel on this server if an error occurs.
*/
* Read a given number of bytes from the server and place it into a specific
* buffer. Reset the IO channel on this server if an error occurs.
*/
-memcached_return_t memcached_safe_read(
org::libmemcached::Instance
* instance,
+memcached_return_t memcached_safe_read(
memcached_instance_st
* instance,
void *dta,
const size_t size)
{
void *dta,
const size_t size)
{
@@
-853,7
+866,7
@@
memcached_return_t memcached_safe_read(org::libmemcached::Instance* instance,
return MEMCACHED_SUCCESS;
}
return MEMCACHED_SUCCESS;
}
-memcached_return_t memcached_io_readline(
org::libmemcached::Instance
* instance,
+memcached_return_t memcached_io_readline(
memcached_instance_st
* instance,
char *buffer_ptr,
size_t size,
size_t& total_nr)
char *buffer_ptr,
size_t size,
size_t& total_nr)