Beispiel #1
0
cairo_status_t
_cairo_freepool_alloc_array (cairo_freepool_t *freepool,
                             int count,
                             void **array)
{
    int i;

    for (i = 0; i < count; i++) {
        cairo_freelist_node_t *node;

        node = freepool->first_free_node;
        if (likely (node != NULL)) {
            VG (VALGRIND_MAKE_MEM_DEFINED (node, sizeof (node->next)));
            freepool->first_free_node = node->next;
            VG (VALGRIND_MAKE_MEM_UNDEFINED (node, freepool->nodesize));
        } else {
            node = _cairo_freepool_alloc_from_pool (freepool);
            if (unlikely (node == NULL))
                goto CLEANUP;
        }

        array[i] = node;
    }

    return CAIRO_STATUS_SUCCESS;

CLEANUP:
    while (i--)
        _cairo_freepool_free (freepool, array[i]);

    return _cairo_error (CAIRO_STATUS_NO_MEMORY);
}
static void
_cairo_bo_event_queue_delete (cairo_bo_event_queue_t *queue,
			      cairo_bo_event_t	     *event)
{
    _cairo_freepool_free (&queue->pool, event);
}