struct cork_subprocess_group * cork_subprocess_group_new(void) { struct cork_subprocess_group *group = cork_new(struct cork_subprocess_group); cork_pointer_array_init (&group->subprocesses, (cork_free_f) cork_subprocess_free); return group; }
struct vrt_queue * vrt_queue_new(const char *name, struct vrt_value_type *value_type, unsigned int size) { struct vrt_queue *q = cork_new(struct vrt_queue); memset(q, 0, sizeof(struct vrt_queue)); q->name = cork_strdup(name); unsigned int value_count; if (size == 0) { value_count = DEFAULT_QUEUE_SIZE; } else { if (size < MINIMUM_QUEUE_SIZE) { size = MINIMUM_QUEUE_SIZE; } value_count = min_power_of_2(size); } q->value_mask = value_count - 1; q->last_consumed_id = starting_value; q->last_claimed_id.value = q->last_consumed_id; q->cursor.value = q->last_consumed_id; q->value_type = value_type; q->values = cork_calloc(value_count, sizeof(struct vrt_value *)); clog_debug("[%s] Create queue with %u entries", q->name, value_count); cork_pointer_array_init(&q->producers, (cork_free_f) vrt_producer_free); cork_pointer_array_init(&q->consumers, (cork_free_f) vrt_consumer_free); unsigned int i; for (i = 0; i < value_count; i++) { q->values[i] = vrt_value_new(value_type); cork_abort_if_null(q->values[i], "Cannot allocate values"); } return q; }