6 memcached_st
*memcached_create(memcached_st
*ptr
)
8 memcached_result_st
*result_ptr
;
12 ptr
= (memcached_st
*)malloc(sizeof(memcached_st
));
15 return NULL
; /* MEMCACHED_MEMORY_ALLOCATION_FAILURE */
17 memset(ptr
, 0, sizeof(memcached_st
));
18 ptr
->is_allocated
= MEMCACHED_ALLOCATED
;
22 memset(ptr
, 0, sizeof(memcached_st
));
24 result_ptr
= memcached_result_create(ptr
, &ptr
->result
);
25 WATCHPOINT_ASSERT(result_ptr
);
26 ptr
->poll_timeout
= MEMCACHED_DEFAULT_TIMEOUT
;
27 ptr
->connect_timeout
= MEMCACHED_DEFAULT_TIMEOUT
;
28 ptr
->retry_timeout
= 0;
29 ptr
->distribution
= MEMCACHED_DISTRIBUTION_MODULA
;
34 void memcached_free(memcached_st
*ptr
)
36 /* If we have anything open, lets close it now */
38 server_list_free(ptr
, ptr
->hosts
);
39 memcached_result_free(&ptr
->result
);
47 ptr
->call_free(ptr
, ptr
->continuum
);
55 ptr
->call_free(ptr
, ptr
->wheel
);
60 if (ptr
->is_allocated
== MEMCACHED_ALLOCATED
)
63 ptr
->call_free(ptr
, ptr
);
68 ptr
->is_allocated
= MEMCACHED_USED
;
72 clone is the destination, while ptr is the structure to clone.
73 If ptr is NULL the call is the same as if a memcached_create() was
76 memcached_st
*memcached_clone(memcached_st
*clone
, memcached_st
*ptr
)
78 memcached_return rc
= MEMCACHED_SUCCESS
;
79 memcached_st
*new_clone
;
82 return memcached_create(clone
);
84 if (ptr
->is_allocated
== MEMCACHED_USED
)
90 new_clone
= memcached_create(clone
);
92 if (new_clone
== NULL
)
96 rc
= memcached_server_push(new_clone
, ptr
->hosts
);
98 if (rc
!= MEMCACHED_SUCCESS
)
100 memcached_free(new_clone
);
106 new_clone
->flags
= ptr
->flags
;
107 new_clone
->send_size
= ptr
->send_size
;
108 new_clone
->recv_size
= ptr
->recv_size
;
109 new_clone
->poll_timeout
= ptr
->poll_timeout
;
110 new_clone
->connect_timeout
= ptr
->connect_timeout
;
111 new_clone
->retry_timeout
= ptr
->retry_timeout
;
112 new_clone
->distribution
= ptr
->distribution
;
113 new_clone
->hash
= ptr
->hash
;
114 new_clone
->user_data
= ptr
->user_data
;
116 new_clone
->on_clone
= ptr
->on_clone
;
117 new_clone
->on_cleanup
= ptr
->on_cleanup
;
118 new_clone
->call_free
= ptr
->call_free
;
119 new_clone
->call_malloc
= ptr
->call_malloc
;
120 new_clone
->call_realloc
= ptr
->call_realloc
;
121 new_clone
->get_key_failure
= ptr
->get_key_failure
;
122 new_clone
->delete_trigger
= ptr
->delete_trigger
;
124 rc
= run_distribution(new_clone
);
125 if (rc
!= MEMCACHED_SUCCESS
)
127 memcached_free(new_clone
);
133 ptr
->on_clone(ptr
, new_clone
);