6 memcached_st
*memcached_create(memcached_st
*ptr
)
8 memcached_result_st
*result_ptr
;
12 ptr
= (memcached_st
*)calloc(1, sizeof(memcached_st
));
15 return NULL
; /* MEMCACHED_MEMORY_ALLOCATION_FAILURE */
17 ptr
->is_allocated
= true;
21 memset(ptr
, 0, sizeof(memcached_st
));
24 memcached_set_memory_allocators(ptr
, NULL
, NULL
, NULL
, NULL
);
26 result_ptr
= memcached_result_create(ptr
, &ptr
->result
);
27 WATCHPOINT_ASSERT(result_ptr
);
28 ptr
->poll_timeout
= MEMCACHED_DEFAULT_TIMEOUT
;
29 ptr
->connect_timeout
= MEMCACHED_DEFAULT_TIMEOUT
;
30 ptr
->retry_timeout
= 0;
31 ptr
->distribution
= MEMCACHED_DISTRIBUTION_MODULA
;
33 /* TODO, Document why we picked these defaults */
34 ptr
->io_msg_watermark
= 500;
35 ptr
->io_bytes_watermark
= 65 * 1024;
40 void memcached_free(memcached_st
*ptr
)
42 /* If we have anything open, lets close it now */
44 server_list_free(ptr
, ptr
->hosts
);
45 memcached_result_free(&ptr
->result
);
51 ptr
->call_free(ptr
, ptr
->continuum
);
53 if (ptr
->is_allocated
)
54 ptr
->call_free(ptr
, ptr
);
56 memset(ptr
, 0, sizeof(memcached_st
));
60 clone is the destination, while source is the structure to clone.
61 If source is NULL the call is the same as if a memcached_create() was
64 memcached_st
*memcached_clone(memcached_st
*clone
, memcached_st
*source
)
66 memcached_return rc
= MEMCACHED_SUCCESS
;
67 memcached_st
*new_clone
;
70 return memcached_create(clone
);
72 if (clone
&& clone
->is_allocated
)
77 new_clone
= memcached_create(clone
);
79 if (new_clone
== NULL
)
82 new_clone
->flags
= source
->flags
;
83 new_clone
->send_size
= source
->send_size
;
84 new_clone
->recv_size
= source
->recv_size
;
85 new_clone
->poll_timeout
= source
->poll_timeout
;
86 new_clone
->connect_timeout
= source
->connect_timeout
;
87 new_clone
->retry_timeout
= source
->retry_timeout
;
88 new_clone
->distribution
= source
->distribution
;
89 new_clone
->hash
= source
->hash
;
90 new_clone
->hash_continuum
= source
->hash_continuum
;
91 new_clone
->user_data
= source
->user_data
;
93 new_clone
->snd_timeout
= source
->snd_timeout
;
94 new_clone
->rcv_timeout
= source
->rcv_timeout
;
96 new_clone
->on_clone
= source
->on_clone
;
97 new_clone
->on_cleanup
= source
->on_cleanup
;
98 new_clone
->call_free
= source
->call_free
;
99 new_clone
->call_malloc
= source
->call_malloc
;
100 new_clone
->call_realloc
= source
->call_realloc
;
101 new_clone
->call_calloc
= source
->call_calloc
;
102 new_clone
->get_key_failure
= source
->get_key_failure
;
103 new_clone
->delete_trigger
= source
->delete_trigger
;
104 new_clone
->server_failure_limit
= source
->server_failure_limit
;
105 new_clone
->io_msg_watermark
= source
->io_msg_watermark
;
106 new_clone
->io_bytes_watermark
= source
->io_bytes_watermark
;
107 new_clone
->io_key_prefetch
= source
->io_key_prefetch
;
108 new_clone
->number_of_replicas
= source
->number_of_replicas
;
111 rc
= memcached_server_push(new_clone
, source
->hosts
);
113 if (rc
!= MEMCACHED_SUCCESS
)
115 memcached_free(new_clone
);
121 if (source
->prefix_key
[0] != 0)
123 strcpy(new_clone
->prefix_key
, source
->prefix_key
);
124 new_clone
->prefix_key_length
= source
->prefix_key_length
;
127 rc
= run_distribution(new_clone
);
128 if (rc
!= MEMCACHED_SUCCESS
)
130 memcached_free(new_clone
);
135 if (source
->on_clone
)
136 source
->on_clone(source
, new_clone
);
140 void *memcached_get_user_data(memcached_st
*ptr
)
142 return ptr
->user_data
;
145 void *memcached_set_user_data(memcached_st
*ptr
, void *data
)
147 void *ret
= ptr
->user_data
;
148 ptr
->user_data
= data
;