X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fserver.c;h=f480750d8679079c5003ce4448c834777da91c6d;hb=2c51ea585ccfbf3a14fed6d28f9115292ad0e6fc;hp=bcc211f655a4e9e88aa73aac4868970ab2c6ae1d;hpb=6bd950c979c31a5cf84c7bdaaad9bccc789a0eb1;p=awesomized%2Flibmemcached diff --git a/libmemcached/server.c b/libmemcached/server.c index bcc211f6..f480750d 100644 --- a/libmemcached/server.c +++ b/libmemcached/server.c @@ -19,6 +19,7 @@ static inline void _server_init(memcached_server_st *self, const memcached_st *r uint32_t weight, memcached_connection_t type) { self->options.sockaddr_inited= false; + self->options.is_shutting_down= false; self->number_of_hosts= 0; self->cursor_active= 0; self->port= port; @@ -53,7 +54,7 @@ static inline void _server_init(memcached_server_st *self, const memcached_st *r if (hostname == NULL) self->hostname[0]= 0; else - strncpy(self->hostname, hostname, MEMCACHED_MAX_HOST_LENGTH - 1); + strncpy(self->hostname, hostname, NI_MAXHOST - 1); } static memcached_server_st *_server_create(memcached_server_st *self, const memcached_st *memc) @@ -100,7 +101,7 @@ memcached_server_st *memcached_server_create_with(const memcached_st *memc, memc void memcached_server_free(memcached_server_st *self) { - memcached_quit_server(self, 0); + memcached_quit_server(self, false); if (self->cached_server_error) free(self->cached_server_error); @@ -227,3 +228,38 @@ void memcached_server_list_free(memcached_server_st *ptr) { server_list_free(NULL, ptr); } + +/** + @todo allow lists to query themselves even if they lack a root +*/ +memcached_return_t memcached_server_remove(memcached_server_st *st_ptr) +{ + uint32_t x, host_index; + memcached_st *root= (memcached_st *)st_ptr->root; + memcached_server_st *list; + + if (root == NULL) + return MEMCACHED_FAILURE; + + list= memcached_server_list(root); + + for (x= 0, host_index= 0; x < memcached_server_count(root); x++) + { + if (strncmp(list[x].hostname, st_ptr->hostname, NI_MAXHOST) != 0 || list[x].port != st_ptr->port) + { + if (host_index != x) + memcpy(list+host_index, list+x, sizeof(memcached_server_st)); + host_index++; + } + } + root->number_of_hosts= host_index; + + if (st_ptr->address_info) + { + freeaddrinfo(st_ptr->address_info); + st_ptr->address_info= NULL; + } + run_distribution(root); + + return MEMCACHED_SUCCESS; +}