diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cairo-freelist-private.h | 29 | ||||
-rw-r--r-- | src/cairo-freelist.c | 29 |
2 files changed, 27 insertions, 31 deletions
diff --git a/src/cairo-freelist-private.h b/src/cairo-freelist-private.h index d48a7201..420fa333 100644 --- a/src/cairo-freelist-private.h +++ b/src/cairo-freelist-private.h @@ -22,6 +22,7 @@ #ifndef CAIRO_FREELIST_H #define CAIRO_FREELIST_H +#include "cairoint.h" #include "cairo-types-private.h" #include "cairo-compiler-private.h" @@ -96,8 +97,32 @@ _cairo_freepool_init (cairo_freepool_t *freepool, unsigned nodesize); cairo_private void _cairo_freepool_fini (cairo_freepool_t *freepool); -cairo_private void * -_cairo_freepool_alloc_from_new_pool (cairo_freepool_t *freepool); +static inline void * +_cairo_freepool_alloc_from_new_pool (cairo_freepool_t *freepool) +{ + cairo_freelist_pool_t *pool; + int poolsize; + + if (freepool->pools != &freepool->embedded_pool) + poolsize = 2 * freepool->pools->size; + else + poolsize = (128 * freepool->nodesize + 8191) & -8192; + pool = malloc (sizeof (cairo_freelist_pool_t) + poolsize); + if (unlikely (pool == NULL)) + return pool; + + pool->next = freepool->pools; + freepool->pools = pool; + + pool->size = poolsize; + pool->rem = poolsize - freepool->nodesize; + pool->data = (uint8_t *) (pool + 1) + freepool->nodesize; + + VG (VALGRIND_MAKE_MEM_NOACCESS (pool->data, poolsize)); + VG (VALGRIND_MAKE_MEM_UNDEFINED (pool->data, freepool->nodesize)); + + return pool + 1; +} static inline void * _cairo_freepool_alloc_from_pool (cairo_freepool_t *freepool) diff --git a/src/cairo-freelist.c b/src/cairo-freelist.c index 6277f907..e7f3ac2b 100644 --- a/src/cairo-freelist.c +++ b/src/cairo-freelist.c @@ -20,8 +20,6 @@ * OF THIS SOFTWARE. */ -#include "cairoint.h" - #include "cairo-freelist-private.h" void @@ -111,30 +109,3 @@ _cairo_freepool_fini (cairo_freepool_t *freepool) } VG (VALGRIND_MAKE_MEM_NOACCESS (freepool, sizeof (freepool))); } - -void * -_cairo_freepool_alloc_from_new_pool (cairo_freepool_t *freepool) -{ - cairo_freelist_pool_t *pool; - int poolsize; - - if (freepool->pools != &freepool->embedded_pool) - poolsize = 2 * freepool->pools->size; - else - poolsize = (128 * freepool->nodesize + 8191) & -8192; - pool = malloc (sizeof (cairo_freelist_pool_t) + poolsize); - if (unlikely (pool == NULL)) - return pool; - - pool->next = freepool->pools; - freepool->pools = pool; - - pool->size = poolsize; - pool->rem = poolsize - freepool->nodesize; - pool->data = (uint8_t *) (pool + 1) + freepool->nodesize; - - VG (VALGRIND_MAKE_MEM_NOACCESS (pool->data, poolsize)); - VG (VALGRIND_MAKE_MEM_UNDEFINED (pool->data, freepool->nodesize)); - - return pool + 1; -} |