X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_get.c;h=34fcb4ea974a1ad2729e000ff2fac2624558d160;hb=901d63226e7c2385b6f169f9f09007f65a0c2fe4;hp=a2f7716d485d3e190b694899ef8074a487229c92;hpb=571fad579922f2b10873193500dfd0652f4fdc37;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached_get.c b/libmemcached/memcached_get.c index a2f7716d..34fcb4ea 100644 --- a/libmemcached/memcached_get.c +++ b/libmemcached/memcached_get.c @@ -51,22 +51,28 @@ char *memcached_get_by_key(memcached_st *ptr, /* On all failure drop to returning NULL */ if (rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED) { - uint8_t latch; /* We use latch to track the state of the original socket */ - if (rc == MEMCACHED_BUFFERED) { + uint8_t latch; /* We use latch to track the state of the original socket */ latch= memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS); if (latch == 0) memcached_behavior_set(ptr, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, 1); - } - rc= memcached_set(ptr, key, key_length, - memcached_result_value(&ptr->result), - memcached_result_length(&ptr->result), - 0, memcached_result_flags(&ptr->result)); + rc= memcached_set(ptr, key, key_length, + memcached_result_value(&ptr->result), + memcached_result_length(&ptr->result), + 0, memcached_result_flags(&ptr->result)); - if (rc == MEMCACHED_BUFFERED && latch == 0) - memcached_behavior_set(ptr, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, 0); + if (rc == MEMCACHED_BUFFERED && latch == 0) + memcached_behavior_set(ptr, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, 0); + } + else + { + rc= memcached_set(ptr, key, key_length, + memcached_result_value(&ptr->result), + memcached_result_length(&ptr->result), + 0, memcached_result_flags(&ptr->result)); + } if (rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED) { @@ -180,6 +186,17 @@ memcached_return memcached_mget_by_key(memcached_st *ptr, WATCHPOINT_ASSERT(ptr->hosts[server_key].cursor_active == 1); } + /* Only called when we have a prefix key */ + if (ptr->prefix_key[0] != 0) + { + if ((memcached_io_write(&ptr->hosts[server_key], ptr->prefix_key, ptr->prefix_key_length, 0)) == -1) + { + memcached_server_response_reset(&ptr->hosts[server_key]); + rc= MEMCACHED_SOME_ERRORS; + continue; + } + } + if ((memcached_io_write(&ptr->hosts[server_key], keys[x], key_length[x], 0)) == -1) { memcached_server_response_reset(&ptr->hosts[server_key]);