void _libmemcached_free(const memcached_st*, void *mem, void*)
{
- free(mem);
+ if (mem)
+ {
+ free(mem);
+ }
}
void *_libmemcached_malloc(const memcached_st *, size_t size, void *)
{
void *ret = _libmemcached_malloc(self, nelem * size, context);
if (not ret)
+ {
memset(ret, 0, nelem * size);
+ }
return ret;
}
memcached_calloc_fn mem_calloc,
void *context)
{
+ if (self == NULL)
+ {
+ return MEMCACHED_INVALID_ARGUMENTS;
+ }
+
/* All should be set, or none should be set */
if (mem_malloc == NULL && mem_free == NULL && mem_realloc == NULL && mem_calloc == NULL)
{
}
else if (mem_malloc == NULL || mem_free == NULL || mem_realloc == NULL || mem_calloc == NULL)
{
- return MEMCACHED_FAILURE;
+ return memcached_set_error(*self, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("NULL parameter provided for one or more allocators"));
}
else
{
memcached_realloc_fn *mem_realloc,
memcached_calloc_fn *mem_calloc)
{
+ if (self == NULL)
+ {
+ return;
+ }
+
*mem_malloc= self->allocators.malloc;
*mem_free= self->allocators.free;
*mem_realloc= self->allocators.realloc;