projects
/
m6w6
/
libmemcached
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
Merge in bug fix for 456080.
[m6w6/libmemcached]
/
libmemcached
/
version.c
diff --git
a/libmemcached/version.c
b/libmemcached/version.c
index dde59066083c970d3c21105babd0d84c959873de..cb8fa0e057f26a7edf4991d394da854ccffff2ec 100644
(file)
--- a/
libmemcached/version.c
+++ b/
libmemcached/version.c
@@
-13,18
+13,13
@@
memcached_return_t memcached_version(memcached_st *ptr)
if (ptr->flags.use_udp)
return MEMCACHED_NOT_SUPPORTED;
if (ptr->flags.use_udp)
return MEMCACHED_NOT_SUPPORTED;
- bool was_blocking= ptr->flags.no_block;
memcached_return_t rc;
memcached_return_t rc;
- ptr->flags.no_block= false;
-
if (ptr->flags.binary_protocol)
rc= memcached_version_binary(ptr);
else
rc= memcached_version_textual(ptr);
if (ptr->flags.binary_protocol)
rc= memcached_version_binary(ptr);
else
rc= memcached_version_textual(ptr);
- ptr->flags.no_block= was_blocking;
-
return rc;
}
return rc;
}
@@
-45,10
+40,14
@@
static inline memcached_return_t memcached_version_textual(memcached_st *ptr)
memcached_server_write_instance_st instance=
memcached_server_instance_fetch(ptr, x);
memcached_server_write_instance_st instance=
memcached_server_instance_fetch(ptr, x);
+ // Optimization, we only fetch version once.
+ if (instance->major_version != UINT8_MAX)
+ continue;
+
rrc= memcached_do(instance, command, send_length, true);
if (rrc != MEMCACHED_SUCCESS)
{
rrc= memcached_do(instance, command, send_length, true);
if (rrc != MEMCACHED_SUCCESS)
{
- instance->major_version= instance->minor_version= instance->micro_version=
0
;
+ instance->major_version= instance->minor_version= instance->micro_version=
UINT8_MAX
;
rc= MEMCACHED_SOME_ERRORS;
continue;
}
rc= MEMCACHED_SOME_ERRORS;
continue;
}
@@
-56,7
+55,7
@@
static inline memcached_return_t memcached_version_textual(memcached_st *ptr)
rrc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
if (rrc != MEMCACHED_SUCCESS)
{
rrc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
if (rrc != MEMCACHED_SUCCESS)
{
- instance->major_version= instance->minor_version= instance->micro_version=
0
;
+ instance->major_version= instance->minor_version= instance->micro_version=
UINT8_MAX
;
rc= MEMCACHED_SOME_ERRORS;
continue;
}
rc= MEMCACHED_SOME_ERRORS;
continue;
}
@@
-68,7
+67,7
@@
static inline memcached_return_t memcached_version_textual(memcached_st *ptr)
instance->major_version= (uint8_t)strtol(response_ptr, (char **)NULL, 10);
if (errno == ERANGE)
{
instance->major_version= (uint8_t)strtol(response_ptr, (char **)NULL, 10);
if (errno == ERANGE)
{
- instance->major_version= instance->minor_version= instance->micro_version=
0
;
+ instance->major_version= instance->minor_version= instance->micro_version=
UINT8_MAX
;
rc= MEMCACHED_SOME_ERRORS;
continue;
}
rc= MEMCACHED_SOME_ERRORS;
continue;
}
@@
-79,7
+78,7
@@
static inline memcached_return_t memcached_version_textual(memcached_st *ptr)
instance->minor_version= (uint8_t)strtol(response_ptr, (char **)NULL, 10);
if (errno == ERANGE)
{
instance->minor_version= (uint8_t)strtol(response_ptr, (char **)NULL, 10);
if (errno == ERANGE)
{
- instance->major_version= instance->minor_version= instance->micro_version=
0
;
+ instance->major_version= instance->minor_version= instance->micro_version=
UINT8_MAX
;
rc= MEMCACHED_SOME_ERRORS;
continue;
}
rc= MEMCACHED_SOME_ERRORS;
continue;
}
@@
-89,7
+88,7
@@
static inline memcached_return_t memcached_version_textual(memcached_st *ptr)
instance->micro_version= (uint8_t)strtol(response_ptr, (char **)NULL, 10);
if (errno == ERANGE)
{
instance->micro_version= (uint8_t)strtol(response_ptr, (char **)NULL, 10);
if (errno == ERANGE)
{
- instance->major_version= instance->minor_version= instance->micro_version=
0
;
+ instance->major_version= instance->minor_version= instance->micro_version=
UINT8_MAX
;
rc= MEMCACHED_SOME_ERRORS;
continue;
}
rc= MEMCACHED_SOME_ERRORS;
continue;
}
@@
-114,6
+113,9
@@
static inline memcached_return_t memcached_version_binary(memcached_st *ptr)
memcached_server_write_instance_st instance=
memcached_server_instance_fetch(ptr, x);
memcached_server_write_instance_st instance=
memcached_server_instance_fetch(ptr, x);
+ if (instance->major_version != UINT8_MAX)
+ continue;
+
rrc= memcached_do(instance, request.bytes, sizeof(request.bytes), true);
if (rrc != MEMCACHED_SUCCESS)
{
rrc= memcached_do(instance, request.bytes, sizeof(request.bytes), true);
if (rrc != MEMCACHED_SUCCESS)
{
@@
-128,6
+130,9
@@
static inline memcached_return_t memcached_version_binary(memcached_st *ptr)
memcached_server_write_instance_st instance=
memcached_server_instance_fetch(ptr, x);
memcached_server_write_instance_st instance=
memcached_server_instance_fetch(ptr, x);
+ if (instance->major_version != UINT8_MAX)
+ continue;
+
if (memcached_server_response_count(instance) > 0)
{
memcached_return_t rrc;
if (memcached_server_response_count(instance) > 0)
{
memcached_return_t rrc;
@@
-143,8
+148,29
@@
static inline memcached_return_t memcached_version_binary(memcached_st *ptr)
}
instance->major_version= (uint8_t)strtol(buffer, &p, 10);
}
instance->major_version= (uint8_t)strtol(buffer, &p, 10);
+ if (errno == ERANGE)
+ {
+ instance->major_version= instance->minor_version= instance->micro_version= UINT8_MAX;
+ rc= MEMCACHED_SOME_ERRORS;
+ continue;
+ }
+
instance->minor_version= (uint8_t)strtol(p + 1, &p, 10);
instance->minor_version= (uint8_t)strtol(p + 1, &p, 10);
+ if (errno == ERANGE)
+ {
+ instance->major_version= instance->minor_version= instance->micro_version= UINT8_MAX;
+ rc= MEMCACHED_SOME_ERRORS;
+ continue;
+ }
+
instance->micro_version= (uint8_t)strtol(p + 1, NULL, 10);
instance->micro_version= (uint8_t)strtol(p + 1, NULL, 10);
+ if (errno == ERANGE)
+ {
+ instance->major_version= instance->minor_version= instance->micro_version= UINT8_MAX;
+ rc= MEMCACHED_SOME_ERRORS;
+ continue;
+ }
+
}
}
}
}