projects
/
m6w6
/
libmemcached
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
Minor code code cleanup, plus modification to while() loop around poll in
[m6w6/libmemcached]
/
libmemcached
/
io.c
diff --git
a/libmemcached/io.c
b/libmemcached/io.c
index 5102d95b7b118cda6aae0e8086748395ddcb37d5..17398aa37dd2bc54f790f6eec81b403b09456c69 100644
(file)
--- a/
libmemcached/io.c
+++ b/
libmemcached/io.c
@@
-53,15
+53,30
@@
static memcached_return_t io_wait(memcached_server_instance_st *ptr,
if (ptr->root->flags.no_block == false)
timeout= -1;
if (ptr->root->flags.no_block == false)
timeout= -1;
- error= poll(&fds, 1, timeout);
+ while (1)
+ {
+ error= poll(&fds, 1, timeout);
- if (error == 1)
- return MEMCACHED_SUCCESS;
- else if (error == 0)
- return MEMCACHED_TIMEOUT;
+ switch (error)
+ {
+ case 1:
+ return MEMCACHED_SUCCESS;
+ case 0:
+ return MEMCACHED_TIMEOUT;
+ case ERESTART:
+ case EINTR:
+ continue;
+ default:
+ ptr->cached_errno= error;
+ memcached_quit_server(ptr, 1);
+
+ return MEMCACHED_FAILURE;
+ }
+ }
/* Imposssible for anything other then -1 */
WATCHPOINT_ASSERT(error == -1);
/* Imposssible for anything other then -1 */
WATCHPOINT_ASSERT(error == -1);
+ ptr->cached_errno= error;
memcached_quit_server(ptr, 1);
return MEMCACHED_FAILURE;
memcached_quit_server(ptr, 1);
return MEMCACHED_FAILURE;
@@
-127,20
+142,21
@@
static bool process_input_buffer(memcached_server_instance_st *ptr)
*/
memcached_callback_st cb= *ptr->root->callbacks;
*/
memcached_callback_st cb= *ptr->root->callbacks;
-
ptr->root->options.is_processing_input= true
;
+
memcached_set_processing_input((memcached_st *)ptr->root, true)
;
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
memcached_return_t error;
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
memcached_return_t error;
+ memcached_st *root= (memcached_st *)ptr->root;
error= memcached_response(ptr, buffer, sizeof(buffer),
error= memcached_response(ptr, buffer, sizeof(buffer),
- &
ptr->
root->result);
+ &root->result);
-
ptr->root->options.is_processing_input = false
;
+
memcached_set_processing_input(root, false)
;
if (error == MEMCACHED_SUCCESS)
{
for (unsigned int x= 0; x < cb.number_of_callback; x++)
{
if (error == MEMCACHED_SUCCESS)
{
for (unsigned int x= 0; x < cb.number_of_callback; x++)
{
- error= (*cb.callback[x])(ptr->root, &
ptr->
root->result, cb.context);
+ error= (*cb.callback[x])(ptr->root, &root->result, cb.context);
if (error != MEMCACHED_SUCCESS)
break;
}
if (error != MEMCACHED_SUCCESS)
break;
}
@@
-156,35
+172,39
@@
static bool process_input_buffer(memcached_server_instance_st *ptr)
static inline void memcached_io_cork_push(memcached_server_st *ptr)
{
static inline void memcached_io_cork_push(memcached_server_st *ptr)
{
+ (void)ptr;
#ifdef CORK
if (ptr->root->flags.cork == false || ptr->state.is_corked)
return;
#ifdef CORK
if (ptr->root->flags.cork == false || ptr->state.is_corked)
return;
- ptr->state.is_corked=
- cork_switch(ptr, true) == MEM_TRUE ? true : false;
+ int enable= 1;
+ int err= setsockopt(ptr->fd, IPPROTO_TCP, CORK,
+ &enable, (socklen_t)sizeof(int));
+ if (! err)
+ ptr->state.is_corked= true;
WATCHPOINT_ASSERT(ptr->state.is_corked == true);
WATCHPOINT_ASSERT(ptr->state.is_corked == true);
-#else
- (void)ptr;
#endif
}
static inline void memcached_io_cork_pop(memcached_server_st *ptr)
{
#endif
}
static inline void memcached_io_cork_pop(memcached_server_st *ptr)
{
+ (void)ptr;
#ifdef CORK
if (ptr->root->flags.cork == false || ptr->state.is_corked == false)
return;
#ifdef CORK
if (ptr->root->flags.cork == false || ptr->state.is_corked == false)
return;
- ptr->state.is_corked=
- cork_switch(ptr, false) == MEM_FALSE ? false : true;
+ int enable= 0;
+ int err= setsockopt(ptr->fd, IPPROTO_TCP, CORK,
+ &enable, (socklen_t)sizeof(int));
+ if (! err)
+ ptr->state.is_corked= false;
WATCHPOINT_ASSERT(ptr->state.is_corked == false);
WATCHPOINT_ASSERT(ptr->state.is_corked == false);
-#else
- (void)ptr;
#endif
}
#endif
}
-#if
def UNUSED
+#if
0 // Dead code, this should be removed.
void memcached_io_preread(memcached_st *ptr)
{
unsigned int x;
void memcached_io_preread(memcached_st *ptr)
{
unsigned int x;
@@
-237,6
+257,7
@@
memcached_return_t memcached_io_read(memcached_server_instance_st *ptr,
{
case EAGAIN:
case EINTR:
{
case EAGAIN:
case EINTR:
+ case ERESTART:
if ((rc= io_wait(ptr, MEM_READ)) == MEMCACHED_SUCCESS)
continue;
/* fall through */
if ((rc= io_wait(ptr, MEM_READ)) == MEMCACHED_SUCCESS)
continue;
/* fall through */
@@
-300,7
+321,7
@@
memcached_return_t memcached_io_read(memcached_server_instance_st *ptr,
}
ssize_t memcached_io_write(memcached_server_instance_st *ptr,
}
ssize_t memcached_io_write(memcached_server_instance_st *ptr,
- const void *buffer, size_t length,
char
with_flush)
+ const void *buffer, size_t length,
bool
with_flush)
{
size_t original_length;
const char* buffer_ptr;
{
size_t original_length;
const char* buffer_ptr;