X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fstorage.cc;h=1b3dbcddd7cd15e220db0b11d5884ef54820931a;hb=1d6aaf09ebb2aafad07307f736d7bab6fdb79d2c;hp=3e29323286d667d7f5c9d1ad10fb654826fdd31f;hpb=51351e672a6a1626e09d5a9d41e3229df44fc3c8;p=m6w6%2Flibmemcached diff --git a/libmemcached/storage.cc b/libmemcached/storage.cc index 3e293232..1b3dbcdd 100644 --- a/libmemcached/storage.cc +++ b/libmemcached/storage.cc @@ -160,8 +160,9 @@ static memcached_return_t memcached_send_binary(memcached_st *ptr, request.message.header.request.cas= memcached_htonll(cas); } - struct libmemcached_io_vector_st vector[]= + libmemcached_io_vector_st vector[]= { + { NULL, 0 }, { request.bytes, send_length }, { memcached_array_string(ptr->_namespace), memcached_array_size(ptr->_namespace) }, { key, key_length }, @@ -170,7 +171,7 @@ static memcached_return_t memcached_send_binary(memcached_st *ptr, /* write the header */ memcached_return_t rc; - if ((rc= memcached_vdo(server, vector, 4, flush)) != MEMCACHED_SUCCESS) + if ((rc= memcached_vdo(server, vector, 5, flush)) != MEMCACHED_SUCCESS) { memcached_io_reset(server); @@ -197,7 +198,7 @@ static memcached_return_t memcached_send_binary(memcached_st *ptr, memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, server_key); - if (memcached_vdo(instance, vector, 4, false) != MEMCACHED_SUCCESS) + if (memcached_vdo(instance, vector, 5, false) != MEMCACHED_SUCCESS) { memcached_io_reset(instance); } @@ -271,8 +272,9 @@ static memcached_return_t memcached_send_ascii(memcached_st *ptr, } } - struct libmemcached_io_vector_st vector[]= + libmemcached_io_vector_st vector[]= { + { NULL, 0 }, { storage_op_string(verb), strlen(storage_op_string(verb))}, { memcached_array_string(ptr->_namespace), memcached_array_size(ptr->_namespace) }, { key, key_length }, @@ -287,21 +289,23 @@ static memcached_return_t memcached_send_ascii(memcached_st *ptr, }; /* Send command header */ - memcached_return_t rc= memcached_vdo(instance, vector, 11, flush); - if (rc == MEMCACHED_SUCCESS) + memcached_return_t rc= memcached_vdo(instance, vector, 12, flush); + + // If we should not reply, return with MEMCACHED_SUCCESS, unless error + if (reply == false) { - if (flush == false) - { - return MEMCACHED_BUFFERED; - } + return memcached_success(rc) ? MEMCACHED_SUCCESS : rc; + } - if (reply == false) - { - return MEMCACHED_SUCCESS; - } + if (flush == false) + { + return memcached_success(rc) ? MEMCACHED_BUFFERED : rc; + } + if (rc == MEMCACHED_SUCCESS) + { char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; - rc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL); + rc= memcached_response(instance, buffer, sizeof(buffer), NULL); if (rc == MEMCACHED_STORED) { @@ -333,19 +337,14 @@ static inline memcached_return_t memcached_send(memcached_st *ptr, memcached_storage_action_t verb) { memcached_return_t rc; - if (memcached_failed(rc= initialize_query(ptr))) - { - return rc; - } - - if (memcached_failed(rc= memcached_validate_key_length(key_length, memcached_is_binary(ptr)))) + if (memcached_failed(rc= initialize_query(ptr, true))) { return rc; } if (memcached_failed(memcached_key_test(*ptr, (const char **)&key, &key_length, 1))) { - return MEMCACHED_BAD_KEY_PROVIDED; + return memcached_last_error(ptr); } uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length);