gsicc_link_cache_t * gsicc_cache_new(gs_memory_t *memory) { gsicc_link_cache_t *result; /* We want this to be maintained in stable_memory. It should be be effected by the save and restores */ result = gs_alloc_struct(memory->stable_memory, gsicc_link_cache_t, &st_icc_linkcache, "gsicc_cache_new"); if ( result == NULL ) return(NULL); result->lock = gx_monitor_alloc(memory->stable_memory); result->wait = gx_semaphore_alloc(memory->stable_memory); if (result->lock == NULL || result->wait == NULL) { gs_free_object(memory->stable_memory, result, "gsicc_cache_new"); return(NULL); } result->num_waiting = 0; rc_init_free(result, memory->stable_memory, 1, rc_gsicc_link_cache_free); result->head = NULL; result->num_links = 0; result->memory = memory->stable_memory; if_debug2(gs_debug_flag_icc,"[icc] Allocating link cache = 0x%x memory = 0x%x\n", result, result->memory); return(result); }
gs_malloc_memory_t * gs_malloc_memory_init(void) { gs_malloc_memory_t *mem = (gs_malloc_memory_t *)malloc(sizeof(gs_malloc_memory_t)); mem->stable_memory = 0; /* just for tidyness, never referenced */ mem->procs = gs_malloc_memory_procs; mem->allocated = 0; mem->limit = max_long; mem->used = 0; mem->max_used = 0; mem->gs_lib_ctx = 0; mem->non_gc_memory = (gs_memory_t *)mem; /* Allocate a monitor to serialize access to structures within */ mem->monitor = NULL; /* prevent use during initial allocation */ mem->monitor = gx_monitor_alloc((gs_memory_t *)mem); return mem; }
/* 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; } }