X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_hosts.c;h=abb1ce036088fc6d56fd003949e67988da5012c5;hb=29c13aacae8a79791e8912ff7520601aa8136d83;hp=79e88701f63b66871b7753dea54fa84c9019ce79;hpb=111fdf4a1cc4fc5daa71cbfcebd126279ce26293;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached_hosts.c b/libmemcached/memcached_hosts.c index 79e88701..abb1ce03 100644 --- a/libmemcached/memcached_hosts.c +++ b/libmemcached/memcached_hosts.c @@ -54,23 +54,6 @@ memcached_return run_distribution(memcached_st *ptr) return MEMCACHED_SUCCESS; } -void host_reset(memcached_st *ptr, memcached_server_st *host, - const char *hostname, unsigned int port, uint32_t weight, - memcached_connection type) -{ - memset(host, 0, sizeof(memcached_server_st)); - strncpy(host->hostname, hostname, MEMCACHED_MAX_HOST_LENGTH - 1); - host->root= ptr ? ptr : NULL; - host->port= port; - host->weight= weight; - host->fd= -1; - host->type= type; - host->read_ptr= host->read_buffer; - if (ptr) - host->next_retry= ptr->retry_timeout; - host->sockaddr_inited= MEMCACHED_NOT_ALLOCATED; -} - void server_list_free(memcached_st *ptr, memcached_server_st *servers) { unsigned int x; @@ -134,14 +117,19 @@ memcached_return update_continuum(memcached_st *ptr) is_ketama_weighted= memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED); points_per_server= is_ketama_weighted ? MEMCACHED_POINTS_PER_SERVER_KETAMA : MEMCACHED_POINTS_PER_SERVER; + if (ptr->number_of_hosts == 0) + return MEMCACHED_SUCCESS; + if (ptr->number_of_hosts > ptr->continuum_count) { memcached_continuum_item_st *new_ptr; if (ptr->call_realloc) - new_ptr= (memcached_continuum_item_st *)ptr->call_realloc(ptr, ptr->continuum, sizeof(memcached_continuum_item_st) * (ptr->number_of_hosts + MEMCACHED_CONTINUUM_ADDITION) * points_per_server); + new_ptr= (memcached_continuum_item_st *)ptr->call_realloc(ptr, ptr->continuum, + sizeof(memcached_continuum_item_st) * (ptr->number_of_hosts + MEMCACHED_CONTINUUM_ADDITION) * points_per_server); else - new_ptr= (memcached_continuum_item_st *)realloc(ptr->continuum, sizeof(memcached_continuum_item_st) * (ptr->number_of_hosts + MEMCACHED_CONTINUUM_ADDITION) * points_per_server); + new_ptr= (memcached_continuum_item_st *)realloc(ptr->continuum, + sizeof(memcached_continuum_item_st) * (ptr->number_of_hosts + MEMCACHED_CONTINUUM_ADDITION) * points_per_server); if (new_ptr == 0) return MEMCACHED_MEMORY_ALLOCATION_FAILURE; @@ -261,8 +249,10 @@ memcached_return memcached_server_push(memcached_st *ptr, memcached_server_st *l for (x= 0; x < count; x++) { WATCHPOINT_ASSERT(list[x].hostname[0] != 0); - host_reset(ptr, &ptr->hosts[ptr->number_of_hosts], list[x].hostname, - list[x].port, list[x].weight, list[x].type); + memcached_server_create(ptr, &ptr->hosts[ptr->number_of_hosts]); + /* TODO check return type */ + (void)memcached_server_create_with(ptr, &ptr->hosts[ptr->number_of_hosts], list[x].hostname, + list[x].port, list[x].weight, list[x].type); ptr->number_of_hosts++; } ptr->hosts[0].count= ptr->number_of_hosts; @@ -346,7 +336,8 @@ static memcached_return server_add(memcached_st *ptr, const char *hostname, ptr->hosts= new_host_list; - host_reset(ptr, &ptr->hosts[ptr->number_of_hosts], hostname, port, weight, type); + /* TODO: Check return type */ + (void)memcached_server_create_with(ptr, &ptr->hosts[ptr->number_of_hosts], hostname, port, weight, type); ptr->number_of_hosts++; ptr->hosts[0].count= ptr->number_of_hosts; @@ -361,9 +352,10 @@ memcached_return memcached_server_remove(memcached_server_st *st_ptr) for (x= 0, index= 0; x < ptr->number_of_hosts; x++) { - if (strncmp(list[x].hostname, st_ptr->hostname, MEMCACHED_MAX_HOST_LENGTH)!=0 || list[x].port != st_ptr->port) + if (strncmp(list[x].hostname, st_ptr->hostname, MEMCACHED_MAX_HOST_LENGTH) != 0 || list[x].port != st_ptr->port) { - memcpy(list+index, list+x, sizeof(memcached_server_st)); + if (index != x) + memcpy(list+index, list+x, sizeof(memcached_server_st)); index++; } } @@ -414,7 +406,8 @@ memcached_server_st *memcached_server_list_append_with_weight(memcached_server_s return NULL; } - host_reset(NULL, &new_host_list[count-1], hostname, port, weight, MEMCACHED_CONNECTION_TCP); + /* TODO: Check return type */ + memcached_server_create_with(NULL, &new_host_list[count-1], hostname, port, weight, MEMCACHED_CONNECTION_TCP); /* Backwards compatibility hack */ new_host_list[0].count= count;