Lines Matching refs:host
44 static int * gw_status_get_counter(gw_host *host, gw_proc *proc, const char *tag, size_t tlen) { in gw_status_get_counter() argument
52 len = buffer_clen(host->id); in gw_status_get_counter()
55 memcpy(label+llen, host->id->ptr, len); in gw_status_get_counter()
74 static void gw_proc_tag_inc(gw_host *host, gw_proc *proc, const char *tag, size_t len) { in gw_proc_tag_inc() argument
75 ++(*gw_status_get_counter(host, proc, tag, len)); in gw_proc_tag_inc()
78 static void gw_proc_connected_inc(gw_host *host, gw_proc *proc) { in gw_proc_connected_inc() argument
79 UNUSED(host); in gw_proc_connected_inc()
83 static void gw_proc_load_inc(gw_host *host, gw_proc *proc) { in gw_proc_load_inc() argument
85 ++(*host->stats_global_active); /* "gw.active-requests" */ in gw_proc_load_inc()
88 static void gw_proc_load_dec(gw_host *host, gw_proc *proc) { in gw_proc_load_dec() argument
90 --(*host->stats_global_active); /* "gw.active-requests" */ in gw_proc_load_dec()
93 static void gw_host_assign(gw_host *host) { in gw_host_assign() argument
94 *host->stats_load = ++host->load; /* "gw.backend...load" */ in gw_host_assign()
97 static void gw_host_reset(gw_host *host) { in gw_host_reset() argument
98 *host->stats_load = --host->load; /* "gw.backend...load" */ in gw_host_reset()
101 static void gw_status_init_proc(gw_host *host, gw_proc *proc) { in gw_status_init_proc() argument
102 *gw_status_get_counter(host, proc, CONST_STR_LEN(".disabled")) = 0; in gw_status_init_proc()
103 *gw_status_get_counter(host, proc, CONST_STR_LEN(".died")) = 0; in gw_status_init_proc()
104 *gw_status_get_counter(host, proc, CONST_STR_LEN(".overloaded")) = 0; in gw_status_init_proc()
106 gw_status_get_counter(host, proc, CONST_STR_LEN(".connected")); in gw_status_init_proc()
109 gw_status_get_counter(host, proc, CONST_STR_LEN(".load")); in gw_status_init_proc()
113 static void gw_status_init_host(gw_host *host) { in gw_status_init_host() argument
114 host->stats_load = in gw_status_init_host()
115 gw_status_get_counter(host, NULL, CONST_STR_LEN(".load")); in gw_status_init_host()
116 *host->stats_load = 0; in gw_status_init_host()
117 host->stats_global_active = in gw_status_init_host()
125 static void gw_proc_set_state(gw_host *host, gw_proc *proc, int state) { in gw_proc_set_state() argument
128 --host->active_procs; in gw_proc_set_state()
130 ++host->active_procs; in gw_proc_set_state()
138 static void gw_proc_init_portpath(gw_host *host, gw_proc *proc) { in gw_proc_init_portpath() argument
139 if (!host->unixsocket) { in gw_proc_init_portpath()
140 proc->port = host->port + proc->id; in gw_proc_init_portpath()
147 if (!host->bin_path) in gw_proc_init_portpath()
148 buffer_copy_buffer(proc->unixsocket, host->unixsocket); in gw_proc_init_portpath()
151 buffer_append_str2(proc->unixsocket, BUF_PTR_LEN(host->unixsocket), in gw_proc_init_portpath()
160 static gw_proc *gw_proc_init(gw_host *host) { in gw_proc_init() argument
170 proc->id = host->max_id++; in gw_proc_init()
171 gw_status_init_proc(host, proc); /*(proc->id must be set)*/ in gw_proc_init()
172 gw_proc_init_portpath(host, proc); in gw_proc_init()
258 static void gw_proc_connect_success(gw_host *host, gw_proc *proc, int debug, request_st * const r) { in gw_proc_connect_success() argument
259 gw_proc_connected_inc(host, proc); /*(".connected")*/ in gw_proc_connect_success()
270 static void gw_proc_connect_error(request_st * const r, gw_host *host, gw_proc *proc, pid_t pid, in… in gw_proc_connect_error() argument
278 proc->disabled_until = cur_ts + host->disable_time; in gw_proc_connect_error()
279 gw_proc_set_state(host, proc, PROC_STATE_OVERLOADED); in gw_proc_connect_error()
293 "load: %d", host->disable_time, host->load); in gw_proc_connect_error()
309 proc->disabled_until = cur_ts + host->disable_time; in gw_proc_connect_error()
310 gw_proc_set_state(host, proc, PROC_STATE_OVERLOADED); in gw_proc_connect_error()
318 gw_proc_set_state(host, proc, PROC_STATE_DIED_WAIT_FOR_PID); in gw_proc_connect_error()
320 proc->disabled_until = cur_ts + host->disable_time; in gw_proc_connect_error()
321 gw_proc_set_state(host, proc, PROC_STATE_OVERLOADED); in gw_proc_connect_error()
327 gw_proc_tag_inc(host, proc, CONST_STR_LEN(".overloaded")); in gw_proc_connect_error()
330 gw_proc_tag_inc(host, proc, CONST_STR_LEN(".died")); in gw_proc_connect_error()
334 static void gw_proc_release(gw_host *host, gw_proc *proc, int debug, log_error_st *errh) { in gw_proc_release() argument
335 gw_proc_load_dec(host, proc); in gw_proc_release()
345 static void gw_proc_check_enable(gw_host * const host, gw_proc * const proc, log_error_st * const e… in gw_proc_check_enable() argument
349 gw_proc_set_state(host, proc, PROC_STATE_RUNNING); in gw_proc_check_enable()
354 host->host ? host->host->ptr : "", host->port, in gw_proc_check_enable()
355 host->unixsocket ? host->unixsocket->ptr : ""); in gw_proc_check_enable()
359 static void gw_proc_waitpid_log(const gw_host * const host, const gw_proc * const proc, log_error_s… in gw_proc_waitpid_log() argument
368 && WTERMSIG(status) != host->kill_signal) { in gw_proc_waitpid_log()
378 static int gw_proc_waitpid(gw_host *host, gw_proc *proc, log_error_st *errh) { in gw_proc_waitpid() argument
395 gw_proc_waitpid_log(host, proc, errh, status); in gw_proc_waitpid()
401 gw_proc_set_state(host, proc, PROC_STATE_DIED); in gw_proc_waitpid()
406 static int gw_proc_sockaddr_init(gw_host * const host, gw_proc * const proc, log_error_st * const e… in gw_proc_sockaddr_init() argument
423 force_assert(host->host); /*(not NULL if !host->unixsocket)*/ in gw_proc_sockaddr_init()
426 if (1 != sock_addr_from_str_hints(&addr, &addrlen, host->host->ptr, in gw_proc_sockaddr_init()
431 else if (host->host->size) { in gw_proc_sockaddr_init()
436 *(const buffer **)&h = host->host; in gw_proc_sockaddr_init()
438 host->family = sock_addr_get_family(&addr); in gw_proc_sockaddr_init()
443 BUF_PTR_LEN(host->host), in gw_proc_sockaddr_init()
489 static int gw_spawn_connection(gw_host * const host, gw_proc * const proc, log_error_st * const err… in gw_spawn_connection() argument
543 if (-1 == listen(gw_fd, host->listen_backlog)) { in gw_spawn_connection()
555 if (host->bin_env_copy && host->bin_env_copy->used) { in gw_spawn_connection()
556 for (i = 0; i < host->bin_env_copy->used; ++i) { in gw_spawn_connection()
557 data_string *ds=(data_string *)host->bin_env_copy->data[i]; in gw_spawn_connection()
576 if (host->bin_env) { in gw_spawn_connection()
577 for (i = 0; i < host->bin_env->used; ++i) { in gw_spawn_connection()
578 data_string *ds = (data_string *)host->bin_env->data[i]; in gw_spawn_connection()
603 int dfd = fdevent_open_dirname(host->args.ptr[0], 1);/*permit symlinks*/ in gw_spawn_connection()
606 "open dirname failed: %s", host->args.ptr[0]); in gw_spawn_connection()
611 ? fdevent_fork_execve(host->args.ptr[0], host->args.ptr, in gw_spawn_connection()
622 "gw-backend failed to start: %s", host->bin_path->ptr); in gw_spawn_connection()
636 if (0 != gw_proc_waitpid(host, proc, errh)) { in gw_spawn_connection()
638 "gw-backend failed to start: %s", host->bin_path->ptr); in gw_spawn_connection()
657 gw_proc_set_state(host, proc, PROC_STATE_RUNNING); in gw_spawn_connection()
662 static void gw_proc_spawn(gw_host * const host, log_error_st * const errh, const int debug) { in gw_proc_spawn() argument
664 for (proc = host->unused_procs; proc; proc = proc->next) { in gw_proc_spawn()
672 if (proc == host->unused_procs) in gw_proc_spawn()
673 host->unused_procs = proc->next; in gw_proc_spawn()
683 gw_proc_init_portpath(host, proc); in gw_proc_spawn()
685 proc = gw_proc_init(host); in gw_proc_spawn()
688 if (0 != gw_proc_sockaddr_init(host, proc, errh)) { in gw_proc_spawn()
693 if (proc->id == host->max_id-1) --host->max_id; in gw_proc_spawn()
695 } else if (gw_spawn_connection(host, proc, errh, debug)) { in gw_proc_spawn()
698 proc->next = host->unused_procs; in gw_proc_spawn()
699 if (host->unused_procs) in gw_proc_spawn()
700 host->unused_procs->prev = proc; in gw_proc_spawn()
701 host->unused_procs = proc; in gw_proc_spawn()
703 proc->next = host->first; in gw_proc_spawn()
704 if (host->first) in gw_proc_spawn()
705 host->first->prev = proc; in gw_proc_spawn()
706 host->first = proc; in gw_proc_spawn()
707 ++host->num_procs; in gw_proc_spawn()
712 static void gw_proc_kill(gw_host *host, gw_proc *proc) { in gw_proc_kill() argument
715 else host->first = proc->next; in gw_proc_kill()
716 --host->num_procs; in gw_proc_kill()
719 proc->next = host->unused_procs; in gw_proc_kill()
722 if (host->unused_procs) in gw_proc_kill()
723 host->unused_procs->prev = proc; in gw_proc_kill()
724 host->unused_procs = proc; in gw_proc_kill()
726 kill(proc->pid, host->kill_signal); in gw_proc_kill()
728 gw_proc_set_state(host, proc, PROC_STATE_KILLED); in gw_proc_kill()
754 gw_host *host = ex->hosts[n]; in unixsocket_is_dup() local
755 if (host->unixsocket in unixsocket_is_dup()
756 && buffer_is_equal(host->unixsocket, unixsocket) in unixsocket_is_dup()
757 && host->bin_path) in unixsocket_is_dup()
758 return host; in unixsocket_is_dup()
830 const gw_host * const host = extension->hosts[k]; in gw_host_get() local
831 if (0 == host->active_procs) continue; in gw_host_get()
832 const uint32_t cur_max = base_hash ^ host->gw_hash; in gw_host_get()
837 host->host ? host->host->ptr : "", in gw_host_get()
852 const gw_host * const host = extension->hosts[k]; in gw_host_get() local
853 if (0 == host->active_procs) continue; in gw_host_get()
854 if (host->load < max_usage) { in gw_host_get()
855 max_usage = host->load; in gw_host_get()
864 const gw_host *host = extension->hosts[0]; in gw_host_get() local
873 && 0 == (host = extension->hosts[ndx])->active_procs) ++ndx; in gw_host_get()
878 host = extension->hosts[ndx]; in gw_host_get()
879 if (0 != host->active_procs) break; in gw_host_get()
883 if (0 == host->active_procs) ndx = -1; in gw_host_get()
899 const gw_host * const host = extension->hosts[k]; in gw_host_get() local
900 if (0 == host->active_procs) continue; in gw_host_get()
901 const uint32_t cur_max = base_hash ^ host->gw_hash ^ host->port; in gw_host_get()
906 host->host ? host->host->ptr : "", in gw_host_get()
907 host->port, cur_max); in gw_host_get()
933 gw_host * const host = extension->hosts[ndx]; in gw_host_get() local
936 host->host ? host->host->ptr : "", host->port); in gw_host_get()
937 return host; in gw_host_get()
944 gw_host * const host = extension->hosts[k]; in gw_host_get() local
945 if (0 == host->min_procs && 0 == host->num_procs && host->bin_path){ in gw_host_get()
946 gw_proc_spawn(host, r->con->srv->errh, debug); in gw_host_get()
947 if (host->num_procs) return host; in gw_host_get()
969 static int gw_establish_connection(request_st * const r, gw_host *host, gw_proc *proc, pid_t pid, i… in gw_establish_connection() argument
973 || (errnum == EAGAIN && host->unixsocket)) { in gw_establish_connection()
982 gw_proc_connect_error(r, host, proc, pid, errnum, debug); in gw_establish_connection()
997 static void gw_restart_dead_proc(gw_host * const host, log_error_st * const errh, const int debug, … in gw_restart_dead_proc() argument
1002 gw_proc_check_enable(host, proc, errh); in gw_restart_dead_proc()
1007 ? host->kill_signal in gw_restart_dead_proc()
1018 if (0 == gw_proc_waitpid(host, proc, errh)) { in gw_restart_dead_proc()
1019 gw_proc_check_enable(host, proc, errh); in gw_restart_dead_proc()
1029 if (host->bin_path) { in gw_restart_dead_proc()
1044 proc->connection_name->ptr, host->max_procs); in gw_restart_dead_proc()
1047 if (gw_spawn_connection(host, proc, errh, debug)) { in gw_restart_dead_proc()
1052 gw_proc_check_enable(host, proc, errh); in gw_restart_dead_proc()
1058 static void gw_restart_dead_procs(gw_host * const host, log_error_st * const errh, const int debug,… in gw_restart_dead_procs() argument
1059 for (gw_proc *proc = host->first; proc; proc = proc->next) { in gw_restart_dead_procs()
1066 gw_restart_dead_proc(host, errh, debug, trigger, proc); in gw_restart_dead_procs()
1120 hctx->host = NULL; in handler_ctx_clear()
1158 gw_host *host = ex->hosts[n]; in gw_plugin_config_free() local
1160 for (proc = host->first; proc; proc = proc->next) { in gw_plugin_config_free()
1162 kill(proc->pid, host->kill_signal); in gw_plugin_config_free()
1170 for (proc = host->unused_procs; proc; proc = proc->next) { in gw_plugin_config_free()
1172 kill(proc->pid, host->kill_signal); in gw_plugin_config_free()
1305 gw_host *host = NULL; in gw_set_defaults_backend() local
1359 host = gw_host_init(); in gw_set_defaults_backend()
1360 host->id = &da_host->key; in gw_set_defaults_backend()
1361 host->check_local = 1; in gw_set_defaults_backend()
1362 host->min_procs = 4; in gw_set_defaults_backend()
1363 host->max_procs = 4; in gw_set_defaults_backend()
1364 host->max_load_per_proc = 1; in gw_set_defaults_backend()
1365 host->idle_timeout = 60; in gw_set_defaults_backend()
1366 host->connect_timeout = 8; in gw_set_defaults_backend()
1367 host->disable_time = 1; in gw_set_defaults_backend()
1368 host->break_scriptfilename_for_php = 0; in gw_set_defaults_backend()
1369 host->kill_signal = SIGTERM; in gw_set_defaults_backend()
1370 host->fix_root_path_name = 0; in gw_set_defaults_backend()
1371 host->listen_backlog = 1024; in gw_set_defaults_backend()
1372 host->xsendfile_allow = 0; in gw_set_defaults_backend()
1373 host->refcount = 0; in gw_set_defaults_backend()
1380 host->host = cpv->v.b; in gw_set_defaults_backend()
1383 host->port = cpv->v.shrt; in gw_set_defaults_backend()
1387 host->unixsocket = cpv->v.b; in gw_set_defaults_backend()
1390 host->listen_backlog = cpv->v.u; in gw_set_defaults_backend()
1394 host->bin_path = cpv->v.b; in gw_set_defaults_backend()
1397 host->kill_signal = cpv->v.shrt; in gw_set_defaults_backend()
1400 host->check_local = (0 != cpv->v.u); in gw_set_defaults_backend()
1417 host->docroot = cpv->v.b; in gw_set_defaults_backend()
1420 host->min_procs = cpv->v.shrt; in gw_set_defaults_backend()
1423 host->max_procs = cpv->v.shrt; in gw_set_defaults_backend()
1426 host->max_load_per_proc = cpv->v.shrt; in gw_set_defaults_backend()
1429 host->idle_timeout = cpv->v.shrt; in gw_set_defaults_backend()
1432 host->disable_time = cpv->v.shrt; in gw_set_defaults_backend()
1435 host->bin_env = cpv->v.a; in gw_set_defaults_backend()
1438 host->bin_env_copy = cpv->v.a; in gw_set_defaults_backend()
1441 host->break_scriptfilename_for_php = (0 != cpv->v.u); in gw_set_defaults_backend()
1444 host->strip_request_uri = cpv->v.b; in gw_set_defaults_backend()
1445 if (buffer_has_slash_suffix(host->strip_request_uri)) { in gw_set_defaults_backend()
1447 *(const buffer **)&b = host->strip_request_uri; in gw_set_defaults_backend()
1452 host->fix_root_path_name = (0 != cpv->v.u); in gw_set_defaults_backend()
1455 host->xsendfile_allow = (0 != cpv->v.u); in gw_set_defaults_backend()
1458 host->xsendfile_allow = (0 != cpv->v.u); in gw_set_defaults_backend()
1461 host->xsendfile_docroot = cpv->v.a; in gw_set_defaults_backend()
1484 host->tcp_fin_propagate = (0 != cpv->v.u); in gw_set_defaults_backend()
1487 host->connect_timeout = cpv->v.u; in gw_set_defaults_backend()
1490 host->write_timeout = cpv->v.u; in gw_set_defaults_backend()
1493 host->read_timeout = cpv->v.u; in gw_set_defaults_backend()
1508 if ((host->host || host->port) && host->unixsocket) { in gw_set_defaults_backend()
1517 if (host->host && *host->host->ptr == '/' && !host->unixsocket) { in gw_set_defaults_backend()
1518 host->unixsocket = host->host; in gw_set_defaults_backend()
1521 if (host->unixsocket) { in gw_set_defaults_backend()
1525 if (buffer_clen(host->unixsocket) + 1 > sizeof(un.sun_path) - 2) { in gw_set_defaults_backend()
1533 if (host->bin_path) { in gw_set_defaults_backend()
1534 gw_host *duplicate = unixsocket_is_dup(p, host->unixsocket); in gw_set_defaults_backend()
1536 if (!buffer_is_equal(host->bin_path, duplicate->bin_path)) { in gw_set_defaults_backend()
1539 host->unixsocket->ptr); in gw_set_defaults_backend()
1542 gw_host_free(host); in gw_set_defaults_backend()
1543 host = duplicate; in gw_set_defaults_backend()
1544 ++host->refcount; in gw_set_defaults_backend()
1548 host->family = AF_UNIX; in gw_set_defaults_backend()
1552 if (!host->host && !host->bin_path) { in gw_set_defaults_backend()
1559 } else if (0 == host->port) { in gw_set_defaults_backend()
1560 host->port = 80; in gw_set_defaults_backend()
1563 if (!host->host) { in gw_set_defaults_backend()
1565 host->host = &lhost; in gw_set_defaults_backend()
1568 host->family = (NULL != strchr(host->host->ptr, ':')) in gw_set_defaults_backend()
1572 if (!host->refcount) in gw_set_defaults_backend()
1573 gw_status_init_host(host); in gw_set_defaults_backend()
1575 if (host->refcount) { in gw_set_defaults_backend()
1577 } else if (host->bin_path) { in gw_set_defaults_backend()
1580 parse_binpath(&host->args, host->bin_path); in gw_set_defaults_backend()
1581 if (0 != stat(host->args.ptr[0], &st) || !S_ISREG(st.st_mode) in gw_set_defaults_backend()
1586 "and is executable by lighttpd)", host->bin_path->ptr); in gw_set_defaults_backend()
1593 for (uint32_t m = 0; m < host->args.used; ++m) in gw_set_defaults_backend()
1594 free(host->args.ptr[m]); in gw_set_defaults_backend()
1595 free(host->args.ptr); in gw_set_defaults_backend()
1597 host->args.ptr = ck_calloc(4, sizeof(char *)); in gw_set_defaults_backend()
1598 host->args.used = 3; in gw_set_defaults_backend()
1599 host->args.ptr[0] = ck_malloc(sizeof("/bin/sh")); in gw_set_defaults_backend()
1600 memcpy(host->args.ptr[0], "/bin/sh", sizeof("/bin/sh")); in gw_set_defaults_backend()
1601 host->args.ptr[1] = ck_malloc(sizeof("-c")); in gw_set_defaults_backend()
1602 memcpy(host->args.ptr[1], "-c", sizeof("-c")); in gw_set_defaults_backend()
1603 host->args.ptr[2] = ck_malloc(sizeof("exec ")-1 in gw_set_defaults_backend()
1604 + buffer_clen(host->bin_path)+1); in gw_set_defaults_backend()
1605 memcpy(host->args.ptr[2], "exec ", sizeof("exec ")-1); in gw_set_defaults_backend()
1606 memcpy(host->args.ptr[2]+sizeof("exec ")-1, in gw_set_defaults_backend()
1607 host->bin_path->ptr, buffer_clen(host->bin_path)+1); in gw_set_defaults_backend()
1608 host->args.ptr[3] = NULL; in gw_set_defaults_backend()
1611 if (host->min_procs > host->max_procs) in gw_set_defaults_backend()
1612 host->min_procs = host->max_procs; in gw_set_defaults_backend()
1613 if (host->min_procs!= host->max_procs in gw_set_defaults_backend()
1615 host->min_procs = host->max_procs; in gw_set_defaults_backend()
1620 if (host->max_load_per_proc < 1) in gw_set_defaults_backend()
1621 host->max_load_per_proc = 0; in gw_set_defaults_backend()
1631 host->bin_path->ptr, in gw_set_defaults_backend()
1632 host->port, in gw_set_defaults_backend()
1633 host->unixsocket ? host->unixsocket->ptr : "", in gw_set_defaults_backend()
1634 host->min_procs, in gw_set_defaults_backend()
1635 host->max_procs); in gw_set_defaults_backend()
1638 for (uint32_t pno = 0; pno < host->min_procs; ++pno) { in gw_set_defaults_backend()
1639 gw_proc * const proc = gw_proc_init(host); in gw_set_defaults_backend()
1647 host->port, in gw_set_defaults_backend()
1648 host->unixsocket ? host->unixsocket->ptr : "", in gw_set_defaults_backend()
1649 pno, host->max_procs); in gw_set_defaults_backend()
1652 if (0 != gw_proc_sockaddr_init(host, proc, srv->errh)) { in gw_set_defaults_backend()
1658 && gw_spawn_connection(host, proc, srv->errh, s->debug)) { in gw_set_defaults_backend()
1665 proc->next = host->first; in gw_set_defaults_backend()
1666 if (host->first) host->first->prev = proc; in gw_set_defaults_backend()
1667 host->first = proc; in gw_set_defaults_backend()
1668 ++host->num_procs; in gw_set_defaults_backend()
1688 gw_proc * const proc = gw_proc_init(host); in gw_set_defaults_backend()
1689 host->first = proc; in gw_set_defaults_backend()
1690 ++host->num_procs; in gw_set_defaults_backend()
1691 host->min_procs = 1; in gw_set_defaults_backend()
1692 host->max_procs = 1; in gw_set_defaults_backend()
1693 if (0 != gw_proc_sockaddr_init(host, proc, srv->errh)) goto error; in gw_set_defaults_backend()
1694 gw_proc_set_state(host, proc, PROC_STATE_RUNNING); in gw_set_defaults_backend()
1697 const buffer * const h = host->host ? host->host : host->unixsocket; in gw_set_defaults_backend()
1698 host->gw_hash = gw_hash(BUF_PTR_LEN(h), DJBHASH_INIT); in gw_set_defaults_backend()
1713 gw_extension_insert(s->exts, &da_ext->key, host); in gw_set_defaults_backend()
1716 ++host->refcount; in gw_set_defaults_backend()
1717 gw_extension_insert(s->exts_auth, &da_ext->key, host); in gw_set_defaults_backend()
1719 ++host->refcount; in gw_set_defaults_backend()
1720 gw_extension_insert(s->exts_resp, &da_ext->key, host); in gw_set_defaults_backend()
1723 host = NULL; in gw_set_defaults_backend()
1730 if (NULL != host) gw_host_free(host); in gw_set_defaults_backend()
1762 if (AF_UNIX != hctx->host->family) { in gw_set_transparent()
1773 gw_host * const host = hctx->host; in gw_host_hctx_enq() local
1777 hctx->next = host->hctxs; in gw_host_hctx_enq()
1780 host->hctxs = hctx; in gw_host_hctx_enq()
1790 hctx->host->hctxs= hctx->next; in gw_host_hctx_deq()
1810 if (hctx->host) { in gw_backend_close()
1812 gw_proc_release(hctx->host, hctx->proc, hctx->conf.debug, in gw_backend_close()
1817 gw_host_reset(hctx->host); in gw_backend_close()
1818 hctx->host = NULL; in gw_backend_close()
1837 hctx->host = gw_host_get(r,hctx->ext,hctx->conf.balance,hctx->conf.debug); in gw_reconnect()
1838 if (NULL == hctx->host) return HANDLER_FINISHED; in gw_reconnect()
1840 gw_host_assign(hctx->host); in gw_reconnect()
1842 hctx->opts.xsendfile_allow = hctx->host->xsendfile_allow; in gw_reconnect()
1843 hctx->opts.xsendfile_docroot = hctx->host->xsendfile_docroot; in gw_reconnect()
1862 if (!hctx->host->tcp_fin_propagate) return; in gw_conditional_tcp_fin()
1911 for (gw_proc *proc = hctx->host->first; proc; proc = proc->next) { in gw_write_request()
1929 gw_proc_load_inc(hctx->host, hctx->proc); in gw_write_request()
1931 hctx->fd = fdevent_socket_nb_cloexec(hctx->host->family,SOCK_STREAM,0); in gw_write_request()
1949 switch (gw_establish_connection(r, hctx->host, hctx->proc, hctx->pid, in gw_write_request()
1968 gw_proc_connect_error(r, hctx->host, hctx->proc, hctx->pid, in gw_write_request()
1976 gw_proc_connect_success(hctx->host, hctx->proc, hctx->conf.debug, r); in gw_write_request()
1993 if (AF_UNIX != hctx->host->family) { in gw_write_request()
2110 gw_restart_dead_procs(hctx->host,srv->errh,hctx->conf.debug,0); in gw_write_error()
2265 gw_host * const host = hctx->host; in gw_authorizer_ok() local
2266 if (host->docroot) { in gw_authorizer_ok()
2267 buffer_copy_buffer(&r->physical.doc_root, host->docroot); in gw_authorizer_ok()
2268 buffer_copy_buffer(&r->physical.basedir, host->docroot); in gw_authorizer_ok()
2270 BUF_PTR_LEN(host->docroot), in gw_authorizer_ok()
2359 gw_host * const host = hctx->host; in gw_recv_response_error() local
2362 && 0 != gw_proc_waitpid(host, proc, errh)) { in gw_recv_response_error()
2366 proc->connection_name->ptr, host->num_procs); in gw_recv_response_error()
2369 if (gw_spawn_connection(host, proc, errh, hctx->conf.debug)) { in gw_recv_response_error()
2473 gw_host *host = NULL; in gw_check_extension() local
2568 host = gw_host_get(r, extension, p->conf.balance, p->conf.debug); in gw_check_extension()
2569 if (NULL == host) { in gw_check_extension()
2583 if (host->check_local) in gw_check_extension()
2618 if (1 == elen && host->fix_root_path_name) { in gw_check_extension()
2638 hctx->host = host; in gw_check_extension()
2641 gw_host_assign(host); in gw_check_extension()
2666 hctx->opts.xsendfile_allow = host->xsendfile_allow; in gw_check_extension()
2667 hctx->opts.xsendfile_docroot = host->xsendfile_docroot; in gw_check_extension()
2690 gw_proc_connect_error(r, hctx->host, hctx->proc, hctx->pid, in gw_handle_trigger_hctx_timeout()
2724 static void gw_handle_trigger_host_timeouts(gw_host * const host) { in gw_handle_trigger_host_timeouts() argument
2726 if (NULL == host->hctxs) return; in gw_handle_trigger_host_timeouts()
2727 const unix_time64_t rsecs = (unix_time64_t)host->read_timeout; in gw_handle_trigger_host_timeouts()
2728 const unix_time64_t wsecs = (unix_time64_t)host->write_timeout; in gw_handle_trigger_host_timeouts()
2729 const unix_time64_t csecs = (unix_time64_t)host->connect_timeout; in gw_handle_trigger_host_timeouts()
2734 for (gw_handler_ctx *hctx = host->hctxs, *next; hctx; hctx = next) { in gw_handle_trigger_host_timeouts()
2757 static void gw_handle_trigger_host(gw_host * const host, log_error_st * const errh, const int debug… in gw_handle_trigger_host() argument
2760 gw_handle_trigger_host_timeouts(host); in gw_handle_trigger_host()
2769 for (proc = host->first; proc; proc = proc->next) { in gw_handle_trigger_host()
2770 gw_proc_waitpid(host, proc, errh); in gw_handle_trigger_host()
2774 gw_restart_dead_procs(host, errh, debug, 1); in gw_handle_trigger_host()
2777 if (host->min_procs == host->max_procs) return; in gw_handle_trigger_host()
2778 if (!host->bin_path) return; in gw_handle_trigger_host()
2780 for (proc = host->first; proc; proc = proc->next) { in gw_handle_trigger_host()
2781 if (proc->load <= host->max_load_per_proc) { in gw_handle_trigger_host()
2787 if (overload && host->num_procs && host->num_procs < host->max_procs) { in gw_handle_trigger_host()
2794 gw_proc_spawn(host, errh, debug); in gw_handle_trigger_host()
2797 idle_timestamp = log_monotonic_secs - host->idle_timeout; in gw_handle_trigger_host()
2798 for (proc = host->first; proc; proc = proc->next) { in gw_handle_trigger_host()
2799 if (host->num_procs <= host->min_procs) break; in gw_handle_trigger_host()
2811 gw_proc_kill(host, proc); in gw_handle_trigger_host()
2818 for (proc = host->unused_procs; proc; proc = proc->next) { in gw_handle_trigger_host()
2819 gw_proc_waitpid(host, proc, errh); in gw_handle_trigger_host()
2837 gw_host * const host = ex->hosts[n]; in gw_handle_trigger_exts_wkr() local
2838 gw_handle_trigger_host_timeouts(host); in gw_handle_trigger_exts_wkr()
2839 for (gw_proc *proc = host->first; proc; proc = proc->next) { in gw_handle_trigger_exts_wkr()
2841 gw_proc_check_enable(host, proc, errh); in gw_handle_trigger_exts_wkr()
2923 gw_host *host = ex->hosts[n]; in gw_handle_waitpid_cb() local
2925 for (proc = host->first; proc; proc = proc->next) { in gw_handle_waitpid_cb()
2928 gw_proc_waitpid_log(host, proc, errh, status); in gw_handle_waitpid_cb()
2929 gw_proc_set_state(host, proc, PROC_STATE_DIED); in gw_handle_waitpid_cb()
2938 if (gw_spawn_connection(host, proc, errh, debug)) { in gw_handle_waitpid_cb()
2946 for (proc = host->unused_procs; proc; proc = proc->next) { in gw_handle_waitpid_cb()
2949 gw_proc_waitpid_log(host, proc, errh, status); in gw_handle_waitpid_cb()
2952 gw_proc_set_state(host, proc, PROC_STATE_DIED); in gw_handle_waitpid_cb()