static rstatus_t stats_start_aggregator(struct stats *st) { rstatus_t status; if (!stats_enabled) { return NC_OK; } status = stats_listen(st); if (status != NC_OK) { return status; } st->st_evb = evbase_create(1, NULL); if (st->st_evb == NULL) { log_error("stats aggregator create failed: %s", strerror(errno)); return NC_ERROR; } ASSERT(st->st_evb != NULL); ASSERT(st->sd >= 0); status = event_add_st(st->st_evb, st->sd); if (status < 0) { log_error("stats aggregator create failed: %s", strerror(errno)); evbase_destroy(st->st_evb); st->st_evb = NULL; return NC_ERROR; } status = pthread_create(&st->tid, NULL, stats_loop, st); if (status < 0) { log_error("stats aggregator create failed: %s", strerror(status)); evbase_destroy(st->st_evb); st->st_evb = NULL; return NC_ERROR; } return NC_OK; }
//stats状态信息专门起一个线程来处理 static rstatus_t stats_start_aggregator(struct stats *st) { rstatus_t status; if (!stats_enabled) { return NC_OK; } status = stats_listen(st); if (status != NC_OK) { return status; } status = pthread_create(&st->tid, NULL, stats_loop, st); if (status < 0) { log_error("stats aggregator create failed: %s", strerror(status)); return NC_ERROR; } return NC_OK; }
static rstatus_t stats_start_aggregator(struct stats *st) { rstatus_t status; struct epoll_event ev; if (!stats_enabled) { return NC_OK; } status = stats_listen(st); if (status != NC_OK) { return status; } st->ep = epoll_create(10); if (st->ep < 0) { log_error("epoll create failed: %s", strerror(errno)); return NC_ERROR; } ev.data.fd = st->sd; ev.events = EPOLLIN; status = epoll_ctl(st->ep, EPOLL_CTL_ADD, st->sd, &ev); if (status < 0) { log_error("epoll ctl on e %d sd %d failed: %s", st->ep, st->sd, strerror(errno)); return NC_ERROR; } status = pthread_create(&st->tid, NULL, stats_loop, st); if (status < 0) { log_error("stats aggregator create failed: %s", strerror(status)); return NC_ERROR; } return NC_OK; }