ae_event_loop * ae_create_event_loop(int setsize) { ae_event_loop * event_loop = NULL; event_loop = (ae_event_loop *)calloc(1, sizeof(*event_loop)); if (!event_loop) goto err_handle; event_loop->events = (ae_file_event *)calloc(setsize, sizeof(ae_file_event)); event_loop->fired = (ae_fired_event *)calloc(setsize, sizeof(ae_fired_event)); if (!event_loop->events || !event_loop->fired) goto err_handle; event_loop->maxfd = -1; event_loop->setsize = setsize; event_loop->stop = 0; event_loop->time_event_head = NULL; event_loop->last_time = time(NULL); event_loop->time_event_next_id = 0; event_loop->beforesleep = NULL; //使用select if (ae_api_create(event_loop) == AE_ERR) { //LOG here goto err_handle; } int i; for (i = 0; i < setsize; i++) { event_loop->events[i].mask = AE_NONE; } return event_loop; err_handle: if (event_loop) { if(event_loop->events) free(event_loop->events); if(event_loop->fired) free(event_loop->fired); if(event_loop) free(event_loop); } return NULL; }
ae_event_loop *ae_create_event_loop(void) { ae_event_loop *el; int i; el = (ae_event_loop*)malloc(sizeof(*el)); if (!el) { return NULL; } el->time_event_head = NULL; el->time_event_next_id = 0; el->maxfd = -1; el->before_sleep = NULL; if (ae_api_create(el) == -1) { free(el); return NULL; } /* Events with mask == AE_NONE are not set. So let's initialize the vector with it. */ for (i = 0; i < AE_SETSIZE; ++i) { el->events[i].mask = AE_NONE; } return el; }