/* Function: al_create_event_queue */ ALLEGRO_EVENT_QUEUE *al_create_event_queue(void) { ALLEGRO_EVENT_QUEUE *queue = al_malloc(sizeof *queue); ASSERT(queue); if (queue) { _al_vector_init(&queue->sources, sizeof(ALLEGRO_EVENT_SOURCE *)); _al_vector_init(&queue->events, sizeof(ALLEGRO_EVENT)); _al_vector_alloc_back(&queue->events); queue->events_head = 0; queue->events_tail = 0; queue->paused = false; _AL_MARK_MUTEX_UNINITED(queue->mutex); _al_mutex_init(&queue->mutex); _al_cond_init(&queue->cond); _al_register_destructor(_al_dtor_list, "queue", queue, (void (*)(void *)) al_destroy_event_queue); } return queue; }
/* Function: al_create_mutex_recursive */ ALLEGRO_MUTEX *al_create_mutex_recursive(void) { ALLEGRO_MUTEX *mutex = al_malloc(sizeof(*mutex)); if (mutex) { _AL_MARK_MUTEX_UNINITED(mutex->mutex); _al_mutex_init_recursive(&mutex->mutex); } return mutex; }
/* Internal function: _al_event_source_init * Initialise an event source structure. */ void _al_event_source_init(ALLEGRO_EVENT_SOURCE *es) { ALLEGRO_EVENT_SOURCE_REAL *this = (ALLEGRO_EVENT_SOURCE_REAL *)es; memset(es, 0, sizeof(*es)); _AL_MARK_MUTEX_UNINITED(this->mutex); _al_mutex_init(&this->mutex); _al_vector_init(&this->queues, sizeof(ALLEGRO_EVENT_QUEUE *)); this->data = 0; }
/* Internal function: _al_init_destructors * Initialise a list of destructors. */ _AL_DTOR_LIST *_al_init_destructors(void) { _AL_DTOR_LIST *dtors = al_malloc(sizeof(*dtors)); _AL_MARK_MUTEX_UNINITED(dtors->mutex); _al_mutex_init(&dtors->mutex); _al_vector_init(&dtors->dtors, sizeof(DTOR)); return dtors; }
static ALLEGRO_THREAD *create_thread(void) { ALLEGRO_THREAD *outer; outer = al_malloc(sizeof(*outer)); if (!outer) { return NULL; } _AL_MARK_MUTEX_UNINITED(outer->mutex); /* required */ outer->retval = NULL; return outer; }