mempool-system-clean.c revision 2b9884cebb11fdcdfd2959afcd35063d608c287b
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose/* Copyright (c) 2007-2008 Dovecot authors, see the included COPYING file */
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose/* @UNSAFE: whole file */
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose# include <malloc_np.h> /* for malloc_usable_size() with FreeBSD */
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose/* use the maximum of required memory alignment and sizeof(void *)
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose (sizeof(size_t) is assumed to be same. it always is.) */
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose/* FIXME: Disabled for now, broken with Valgrind and HP-UX. */
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic const char *pool_system_clean_get_name(pool_t pool);
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic void pool_system_clean_unref(pool_t *pool);
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic void *pool_system_clean_malloc(pool_t pool, size_t size);
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic void pool_system_clean_free(pool_t pool, void *mem);
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic void *pool_system_clean_realloc(pool_t pool, void *mem,
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic size_t pool_system_clean_get_max_easy_alloc_size(pool_t pool);
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic struct pool_vfuncs static_system_clean_pool_vfuncs = {
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosepool_t system_clean_pool = &static_system_clean_pool;
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic const char *pool_system_clean_get_name(pool_t pool ATTR_UNUSED)
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose return "system clean";
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic void pool_system_clean_ref(pool_t pool ATTR_UNUSED)
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic void pool_system_clean_unref(pool_t *pool ATTR_UNUSED)
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose return *((size_t *)PTR_OFFSET(mem, -EXTRA_SIZE_SPACE));
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic void *pool_system_clean_malloc(pool_t pool ATTR_UNUSED, size_t size)
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose i_panic("Trying to allocate %"PRIuSIZE_T" bytes", size);
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose i_fatal_status(FATAL_OUTOFMEM, "pool_system_malloc(%"PRIuSIZE_T
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose#if !defined(USE_GC) && !defined(HAVE_MALLOC_USABLE_SIZE)
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic void pool_system_clean_free(pool_t pool ATTR_UNUSED, void *mem)
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bosestatic void *pool_system_clean_realloc(pool_t pool ATTR_UNUSED, void *mem,
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose if (unlikely(new_size == 0 || new_size > SSIZE_T_MAX))
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose i_panic("Trying to allocate %"PRIuSIZE_T" bytes", new_size);
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose new_mem = pool_system_clean_malloc(pool, new_size);
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose#if !defined(USE_GC) && defined(HAVE_MALLOC_USABLE_SIZE)
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose /* clear new data */
db36dca3d45e6eefbb30042ee65876566f1a6014Sumit Bose i_panic("pool_system_clean_clear() must not be called");