X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=libmemcached%2Fget.cc;h=be7d9e5f66b226912f86ced59e7d9bf9e277e953;hb=728ffce13e3e3b78d0144ea1e304dee1c1055384;hp=86f136707e0d3a9ebb92d8c63e33b167e9336a8d;hpb=868795ee745fd29e511647fad2176b0f44daba83;p=awesomized%2Flibmemcached diff --git a/libmemcached/get.cc b/libmemcached/get.cc index 86f13670..be7d9e5f 100644 --- a/libmemcached/get.cc +++ b/libmemcached/get.cc @@ -119,8 +119,9 @@ char *memcached_get_by_key(memcached_st *ptr, { if (ptr->get_key_failure and *error == MEMCACHED_NOTFOUND) { - memcached_result_reset(&ptr->result); - memcached_return_t rc= ptr->get_key_failure(ptr, key, key_length, &ptr->result); + memcached_result_st key_failure_result; + memcached_result_st* result_ptr= memcached_result_create(ptr, &key_failure_result); + memcached_return_t rc= ptr->get_key_failure(ptr, key, key_length, result_ptr); /* On all failure drop to returning NULL */ if (rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED) @@ -135,10 +136,10 @@ char *memcached_get_by_key(memcached_st *ptr, } rc= memcached_set(ptr, key, key_length, - (memcached_result_value(&ptr->result)), - (memcached_result_length(&ptr->result)), + (memcached_result_value(result_ptr)), + (memcached_result_length(result_ptr)), 0, - (memcached_result_flags(&ptr->result))); + (memcached_result_flags(result_ptr))); if (rc == MEMCACHED_BUFFERED and latch == 0) { @@ -148,20 +149,25 @@ char *memcached_get_by_key(memcached_st *ptr, else { rc= memcached_set(ptr, key, key_length, - (memcached_result_value(&ptr->result)), - (memcached_result_length(&ptr->result)), + (memcached_result_value(result_ptr)), + (memcached_result_length(result_ptr)), 0, - (memcached_result_flags(&ptr->result))); + (memcached_result_flags(result_ptr))); } if (rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED) { *error= rc; - *value_length= memcached_result_length(&ptr->result); - *flags= memcached_result_flags(&ptr->result); - return memcached_string_take_value(&ptr->result.value); + *value_length= memcached_result_length(result_ptr); + *flags= memcached_result_flags(result_ptr); + char *result_value= memcached_string_take_value(&result_ptr->value); + memcached_result_free(result_ptr); + + return result_value; } } + + memcached_result_free(result_ptr); } assert_msg(ptr->query_id == query_id +1, "Programmer error, the query_id was not incremented.");