X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fserver.c;h=f61f572e6b4d5dd439903e03a2deb3b58d221eb6;hb=f1563c45b37bba7d51228af44dc184a9d0308e81;hp=2cff36da2eedf007a0c3d163137a2cf169151b77;hpb=7c7750f02368b570353ea109f23a0ea26d226e02;p=m6w6%2Flibmemcached diff --git a/libmemcached/server.c b/libmemcached/server.c index 2cff36da..f61f572e 100644 --- a/libmemcached/server.c +++ b/libmemcached/server.c @@ -1,5 +1,5 @@ /* LibMemcached - * Copyright (C) 2006-2009 Brian Aker + * Copyright (C) 2006-2009 Brian Aker * All rights reserved. * * Use and distribution licensed under the BSD license. See @@ -18,7 +18,7 @@ memcached_server_st *memcached_server_create(memcached_st *memc, memcached_serve { if (ptr == NULL) { - ptr= (memcached_server_st *)calloc(1, sizeof(memcached_server_st)); + ptr= (memcached_server_st *)memc->call_calloc(memc, 1, sizeof(memcached_server_st)); if (!ptr) return NULL; /* MEMCACHED_MEMORY_ALLOCATION_FAILURE */ @@ -51,6 +51,7 @@ memcached_server_st *memcached_server_create_with(memcached_st *memc, memcached_ host->fd= -1; host->type= type; host->read_ptr= host->read_buffer; + host->state.is_corked= 0; if (memc) host->next_retry= memc->retry_timeout; if (type == MEMCACHED_CONNECTION_UDP) @@ -94,9 +95,9 @@ memcached_server_st *memcached_server_clone(memcached_server_st *clone, memcache if (ptr == NULL) return NULL; - rv = memcached_server_create_with(ptr->root, clone, - ptr->hostname, ptr->port, ptr->weight, - ptr->type); + rv= memcached_server_create_with(ptr->root, clone, + ptr->hostname, ptr->port, ptr->weight, + ptr->type); if (rv != NULL) { rv->cached_errno= ptr->cached_errno; @@ -113,17 +114,19 @@ memcached_return_t memcached_server_cursor(memcached_st *ptr, void *context, uint32_t number_of_callbacks) { - unsigned int y; + uint32_t y; - for (y= 0; y < ptr->number_of_hosts; y++) + for (y= 0; y < memcached_server_count(ptr); y++) { - unsigned int x; + uint32_t x; + memcached_server_instance_st *instance= + memcached_server_instance_fetch(ptr, y); for (x= 0; x < number_of_callbacks; x++) { unsigned int iferror; - iferror= (*callback[x])(ptr, &ptr->hosts[y], context); + iferror= (*callback[x])(ptr, instance, context); if (iferror) continue; @@ -136,13 +139,14 @@ memcached_return_t memcached_server_cursor(memcached_st *ptr, memcached_server_st *memcached_server_by_key(memcached_st *ptr, const char *key, size_t key_length, memcached_return_t *error) { uint32_t server_key; + memcached_server_instance_st *instance; *error= memcached_validate_key_length(key_length, ptr->flags.binary_protocol); unlikely (*error != MEMCACHED_SUCCESS) return NULL; - unlikely (ptr->number_of_hosts == 0) + unlikely (memcached_server_count(ptr) == 0) { *error= MEMCACHED_NO_SERVERS; return NULL; @@ -155,17 +159,17 @@ memcached_server_st *memcached_server_by_key(memcached_st *ptr, const char *key } server_key= memcached_generate_hash(ptr, key, key_length); + instance= memcached_server_instance_fetch(ptr, server_key); - return memcached_server_clone(NULL, &ptr->hosts[server_key]); + return memcached_server_clone(NULL, instance); } const char *memcached_server_error(memcached_server_st *ptr) { - if (ptr) - return ptr->cached_server_error; - else - return NULL; + return ptr + ? ptr->cached_server_error + : NULL; } void memcached_server_error_reset(memcached_server_st *ptr) @@ -177,3 +181,15 @@ memcached_server_st *memcached_server_get_last_disconnect(memcached_st *ptr) { return ptr->last_disconnected_server; } + +uint32_t memcached_server_list_count(memcached_server_st *ptr) +{ + return (ptr == NULL) + ? 0 + : memcached_servers_count(ptr); +} + +void memcached_server_list_free(memcached_server_st *ptr) +{ + server_list_free(NULL, ptr); +}