6 memcached_st
*memcached_create(memcached_st
*ptr
)
10 ptr
= (memcached_st
*)calloc(1, sizeof(memcached_st
));
14 return NULL
; /* MEMCACHED_MEMORY_ALLOCATION_FAILURE */
17 ptr
->options
.is_allocated
= true;
21 memset(ptr
, 0, sizeof(memcached_st
));
24 ptr
->options
.is_initialized
= true;
25 ptr
->options
.is_purging
= false;
26 ptr
->options
.is_processing_input
= false;
28 memcached_set_memory_allocators(ptr
, NULL
, NULL
, NULL
, NULL
);
30 if (! memcached_result_create(ptr
, &ptr
->result
))
35 ptr
->poll_timeout
= MEMCACHED_DEFAULT_TIMEOUT
;
36 ptr
->connect_timeout
= MEMCACHED_DEFAULT_TIMEOUT
;
37 ptr
->retry_timeout
= 0;
38 ptr
->distribution
= MEMCACHED_DISTRIBUTION_MODULA
;
44 /* TODO, Document why we picked these defaults */
45 ptr
->io_msg_watermark
= 500;
46 ptr
->io_bytes_watermark
= 65 * 1024;
48 WATCHPOINT_ASSERT_INITIALIZED(&ptr
->result
);
53 void server_list_free(memcached_st
*ptr
, memcached_server_st
*servers
)
60 for (x
= 0; x
< memcached_servers_count(servers
); x
++)
62 if (servers
[x
].address_info
)
64 freeaddrinfo(servers
[x
].address_info
);
65 servers
[x
].address_info
= NULL
;
71 ptr
->call_free(ptr
, servers
);
79 void memcached_servers_reset(memcached_st
*ptr
)
81 server_list_free(ptr
, memcached_server_list(ptr
));
83 memcached_server_list_set(ptr
, NULL
);
84 ptr
->number_of_hosts
= 0;
85 ptr
->last_disconnected_server
= NULL
;
86 ptr
->server_failure_limit
= 0;
89 void memcached_free(memcached_st
*ptr
)
91 /* If we have anything open, lets close it now */
93 server_list_free(ptr
, memcached_server_list(ptr
));
94 memcached_result_free(&ptr
->result
);
100 ptr
->call_free(ptr
, ptr
->continuum
);
102 if (memcached_is_allocated(ptr
))
104 ptr
->call_free(ptr
, ptr
);
108 ptr
->options
.is_initialized
= false;
113 clone is the destination, while source is the structure to clone.
114 If source is NULL the call is the same as if a memcached_create() was
117 memcached_st
*memcached_clone(memcached_st
*clone
, memcached_st
*source
)
119 memcached_return_t rc
= MEMCACHED_SUCCESS
;
120 memcached_st
*new_clone
;
123 return memcached_create(clone
);
125 if (clone
&& memcached_is_allocated(clone
))
130 new_clone
= memcached_create(clone
);
132 if (new_clone
== NULL
)
135 new_clone
->flags
= source
->flags
;
136 new_clone
->send_size
= source
->send_size
;
137 new_clone
->recv_size
= source
->recv_size
;
138 new_clone
->poll_timeout
= source
->poll_timeout
;
139 new_clone
->connect_timeout
= source
->connect_timeout
;
140 new_clone
->retry_timeout
= source
->retry_timeout
;
141 new_clone
->distribution
= source
->distribution
;
142 new_clone
->hash
= source
->hash
;
143 new_clone
->distribution_hash
= source
->distribution_hash
;
144 new_clone
->user_data
= source
->user_data
;
146 new_clone
->snd_timeout
= source
->snd_timeout
;
147 new_clone
->rcv_timeout
= source
->rcv_timeout
;
149 new_clone
->on_clone
= source
->on_clone
;
150 new_clone
->on_cleanup
= source
->on_cleanup
;
151 new_clone
->call_free
= source
->call_free
;
152 new_clone
->call_malloc
= source
->call_malloc
;
153 new_clone
->call_realloc
= source
->call_realloc
;
154 new_clone
->call_calloc
= source
->call_calloc
;
155 new_clone
->get_key_failure
= source
->get_key_failure
;
156 new_clone
->delete_trigger
= source
->delete_trigger
;
157 new_clone
->server_failure_limit
= source
->server_failure_limit
;
158 new_clone
->io_msg_watermark
= source
->io_msg_watermark
;
159 new_clone
->io_bytes_watermark
= source
->io_bytes_watermark
;
160 new_clone
->io_key_prefetch
= source
->io_key_prefetch
;
161 new_clone
->number_of_replicas
= source
->number_of_replicas
;
163 if (memcached_server_list(source
))
164 rc
= memcached_server_push(new_clone
, memcached_server_list(source
));
166 if (rc
!= MEMCACHED_SUCCESS
)
168 memcached_free(new_clone
);
174 if (source
->prefix_key
[0] != 0)
176 strcpy(new_clone
->prefix_key
, source
->prefix_key
);
177 new_clone
->prefix_key_length
= source
->prefix_key_length
;
180 rc
= run_distribution(new_clone
);
182 if (rc
!= MEMCACHED_SUCCESS
)
184 memcached_free(new_clone
);
189 if (source
->on_clone
)
190 source
->on_clone(source
, new_clone
);
195 void *memcached_get_user_data(memcached_st
*ptr
)
197 return ptr
->user_data
;
200 void *memcached_set_user_data(memcached_st
*ptr
, void *data
)
202 void *ret
= ptr
->user_data
;
203 ptr
->user_data
= data
;