X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Ferror.cc;h=3de8ece52be8ef41055b1dfb88e864de77d57da3;hb=0246c3f543a3aff173a68db275ad64852410cc2d;hp=2f16cbce2500783495605e26fa8e1e8543505a61;hpb=8c96d045f23d3f787ea6fc84237eb9e30c1c4fce;p=awesomized%2Flibmemcached diff --git a/libmemcached/error.cc b/libmemcached/error.cc index 2f16cbce..3de8ece5 100644 --- a/libmemcached/error.cc +++ b/libmemcached/error.cc @@ -90,7 +90,7 @@ static void _set(Memcached& memc, memcached_string_t *str, memcached_return_t &r memcached_error_free(memc); } - if (memcached_fatal(rc)) + if (memcached_fatal(rc) or rc == MEMCACHED_CLIENT_ERROR) { // For memory allocation we use our error since it is a bit more specific if (local_errno == ENOMEM and rc == MEMCACHED_ERRNO) @@ -145,13 +145,28 @@ static void _set(Memcached& memc, memcached_string_t *str, memcached_return_t &r error->rc= rc; error->local_errno= local_errno; - const char *errmsg_ptr; - char errmsg[MAX_ERROR_LENGTH]; - errmsg[0]= 0; - errmsg_ptr= errmsg; + // MEMCACHED_CLIENT_ERROR is a special case because it is an error coming from the server + if (rc == MEMCACHED_CLIENT_ERROR) + { + assert(str); + assert(str->size); + if (str and str->size) + { + assert(error->local_errno == 0); + error->local_errno= 0; - if (local_errno) + error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %.*s", + error->root, + int(str->size), str->c_str); + } + } + else if (local_errno) { + const char *errmsg_ptr; + char errmsg[MAX_ERROR_LENGTH]; + errmsg[0]= 0; + errmsg_ptr= errmsg; + #if defined(STRERROR_R_CHAR_P) && STRERROR_R_CHAR_P errmsg_ptr= strerror_r(local_errno, errmsg, sizeof(errmsg)); #elif defined(HAVE_STRERROR_R) && HAVE_STRERROR_R @@ -161,24 +176,23 @@ static void _set(Memcached& memc, memcached_string_t *str, memcached_return_t &r snprintf(errmsg, sizeof(errmsg), "%s", strerror(local_errno)); errmsg_ptr= errmsg; #endif - } - - if (str and str->size and local_errno) - { - error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %s(%s), %.*s -> %s", - error->root, - memcached_strerror(&memc, rc), - errmsg_ptr, - memcached_string_printf(*str), at); - } - else if (local_errno) - { - error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %s(%s) -> %s", - error->root, - memcached_strerror(&memc, rc), - errmsg_ptr, - at); + if (str and str->size and local_errno) + { + error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %s(%s), %.*s -> %s", + error->root, + memcached_strerror(&memc, rc), + errmsg_ptr, + memcached_string_printf(*str), at); + } + else + { + error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %s(%s) -> %s", + error->root, + memcached_strerror(&memc, rc), + errmsg_ptr, + at); + } } else if (rc == MEMCACHED_PARSE_ERROR and str and str->size) { @@ -202,21 +216,20 @@ static void _set(Memcached& memc, memcached_string_t *str, memcached_return_t &r error->next= memc.error_messages; memc.error_messages= error; - } - #if 0 - if (error_log_fd == -1) - { -// unlink("/tmp/libmemcachd.log"); - if ((error_log_fd= open("/tmp/libmemcachd.log", O_CREAT | O_WRONLY | O_APPEND, 0644)) < 0) + if (error_log_fd == -1) { - perror("open"); - error_log_fd= -1; + // unlink("/tmp/libmemcachd.log"); + if ((error_log_fd= open("/tmp/libmemcachd.log", O_CREAT | O_WRONLY | O_APPEND, 0644)) < 0) + { + perror("open"); + error_log_fd= -1; + } } - } - ::write(error_log_fd, error->message, error->size); - ::write(error_log_fd, "\n", 1); + ::write(error_log_fd, error->message, error->size); + ::write(error_log_fd, "\n", 1); #endif + } } memcached_return_t memcached_set_error(Memcached& memc, memcached_return_t rc, const char *at, const char *str, size_t length) @@ -312,8 +325,8 @@ memcached_return_t memcached_set_error(memcached_instance_st& self, memcached_re { _set(*self.root, &error_host, rc, at); _set(self, (*self.root)); - assert(self.root->error_messages); assert(self.error_messages); + assert(self.root->error_messages); assert(self.error_messages->rc == self.root->error_messages->rc); } @@ -638,7 +651,7 @@ memcached_return_t memcached_server_error_return(const memcached_instance_st * p return MEMCACHED_INVALID_ARGUMENTS; } - if (ptr and ptr->error_messages) + if (ptr->error_messages) { return ptr->error_messages->rc; } @@ -653,7 +666,7 @@ memcached_return_t memcached_instance_error_return(memcached_instance_st* instan return MEMCACHED_INVALID_ARGUMENTS; } - if (instance and instance->error_messages) + if (instance->error_messages) { return instance->error_messages->rc; }