void li_job_queue_init(liJobQueue* jq, liEventLoop *loop) { li_event_prepare_init(loop, &jq->prepare_watcher, job_queue_prepare_cb); li_event_async_init(loop, &jq->async_queue_watcher, job_async_queue_cb); li_event_timer_init(loop, &jq->queue_watcher, job_queue_watcher_cb); /* job queue */ g_queue_init(&jq->queue); jq->async_queue = g_async_queue_new(); }
static balancer* balancer_new(liWorker *wrk, liPlugin *p, balancer_method method) { balancer *b = g_slice_new0(balancer); b->wrk = wrk; b->lock = g_mutex_new(); b->backends = g_array_new(FALSE, TRUE, sizeof(backend)); b->method = method; b->state = BAL_ALIVE; b->p = p; b->backlog_limit = -1; li_event_timer_init(&wrk->loop, &b->backlog_timer, balancer_timer_cb); li_event_set_keep_loop_alive(&b->backlog_timer, FALSE); li_event_async_init(&wrk->loop, &b->async, balancer_async_cb); return b; }
liConnection* li_connection_new(liWorker *wrk) { liServer *srv = wrk->srv; liConnection *con = g_slice_new0(liConnection); con->wrk = wrk; con->srv = srv; con->state = LI_CON_STATE_DEAD; con->response_headers_sent = FALSE; con->expect_100_cont = FALSE; con->out_has_all_data = FALSE; con->info.remote_addr_str = g_string_sized_new(INET6_ADDRSTRLEN); con->info.local_addr_str = g_string_sized_new(INET6_ADDRSTRLEN); con->info.is_ssl = FALSE; con->info.keep_alive = TRUE; con->info.req = NULL; con->info.resp = NULL; con->info.callbacks = &con_callbacks; con->mainvr = li_vrequest_new(wrk, &con->info); li_http_request_parser_init(&con->req_parser_ctx, &con->mainvr->request, NULL); /* chunkqueue is created in _start */ con->keep_alive_data.link = NULL; con->keep_alive_data.timeout = 0; con->keep_alive_data.max_idle = 0; li_event_timer_init(&wrk->loop, &con->keep_alive_data.watcher, connection_keepalive_cb); con->io_timeout_elem.data = con; li_job_init(&con->job_reset, connection_check_reset); return con; }