Example #1
0
/* Deallocte dynamic memory attached to device. Aware of possible imcomplete open */
static void
gdev_prn_dealloc(gx_device_printer * pwdev)
{
    gx_device_printer *const prdev = pwdev->async_renderer;

    /* Delete renderer device & its memory allocator */
    if (prdev) {
        gs_memory_t *render_alloc = prdev->memory;

        gs_free_object(render_alloc, prdev, "gdev_prn_dealloc");
        free_render_memory(render_alloc);
    }
    /* Free page queue */
    if (pwdev->page_queue) {
        gx_page_queue_dnit(pwdev->page_queue);
        gs_free_object(pwdev->bandlist_memory, pwdev->page_queue,
                       "gdev_prn_dealloc");
        pwdev->page_queue = 0;
    }
    /* Free memory bandlist allocators */
    if (pwdev->bandlist_memory)
        free_bandlist_memory(pwdev->bandlist_memory);
}
Example #2
0
/* Initialize a gx_page_queue object */
int				/* -ve error code, or 0 */
gx_page_queue_init(
		   gx_page_queue_t * queue,	/* page queue to init */
		   gs_memory_t * memory	/* allocator for dynamic memory */
)
{
    queue->memory = memory;
    queue->monitor = gx_monitor_alloc(memory);	/* alloc monitor to serialize */
    queue->entry_count = 0;
    queue->dequeue_in_progress = false;
    queue->render_req_sema = gx_semaphore_alloc(memory);
    queue->enable_render_done_signal = false;
    queue->render_done_sema = gx_semaphore_alloc(memory);
    queue->first_in = queue->last_in = 0;
    queue->reserve_entry = gx_page_queue_entry_alloc(queue);

    if (queue->monitor && queue->render_req_sema && queue->render_done_sema
	&& queue->reserve_entry)
	return 0;
    else {
	gx_page_queue_dnit(queue);
	return gs_error_VMerror;
    }
}