diff options
author | Glenn Strauss <gstrauss@gluelogic.com> | 2021-08-30 22:24:15 -0400 |
---|---|---|
committer | Glenn Strauss <gstrauss@gluelogic.com> | 2021-09-08 15:06:07 -0400 |
commit | 90978eb80889fbc149ac3cc533ed23ccb68cb0ce (patch) | |
tree | d0b54e0ea6a94ec082d896907f72b818523bb077 /src/gw_backend.c | |
parent | 9c7ef4f064ea08665cfa7de4a41130044a646910 (diff) | |
download | lighttpd-git-90978eb80889fbc149ac3cc533ed23ccb68cb0ce.tar.gz |
[core] mark cold more gateway maintenance code
Diffstat (limited to 'src/gw_backend.c')
-rw-r--r-- | src/gw_backend.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/gw_backend.c b/src/gw_backend.c index f096eb86..05703aa6 100644 --- a/src/gw_backend.c +++ b/src/gw_backend.c @@ -123,6 +123,7 @@ static void gw_status_init_host(gw_host *host) { +__attribute_cold__ static void gw_proc_set_state(gw_host *host, gw_proc *proc, int state) { if ((int)proc->state == state) return; if (proc->state == PROC_STATE_RUNNING) { @@ -346,6 +347,7 @@ static void gw_proc_release(gw_host *host, gw_proc *proc, int debug, log_error_s } } +__attribute_cold__ static void gw_proc_check_enable(gw_host * const host, gw_proc * const proc, log_error_st * const errh) { if (log_monotonic_secs <= proc->disabled_until) return; if (proc->state != PROC_STATE_OVERLOADED) return; @@ -359,6 +361,7 @@ static void gw_proc_check_enable(gw_host * const host, gw_proc * const proc, log host->unixsocket ? host->unixsocket->ptr : ""); } +__attribute_cold__ static void gw_proc_waitpid_log(const gw_host * const host, const gw_proc * const proc, log_error_st * const errh, const int status) { if (WIFEXITED(status)) { if (proc->state != PROC_STATE_KILLED) { @@ -405,6 +408,7 @@ static int gw_proc_waitpid(gw_host *host, gw_proc *proc, log_error_st *errh) { return 1; } +__attribute_cold__ static int gw_proc_sockaddr_init(gw_host * const host, gw_proc * const proc, log_error_st * const errh) { sock_addr addr; socklen_t addrlen; @@ -715,6 +719,7 @@ static void gw_proc_spawn(gw_host * const host, log_error_st * const errh, const } } +__attribute_cold__ static void gw_proc_kill(gw_host *host, gw_proc *proc) { if (proc->next) proc->next->prev = proc->prev; if (proc->prev) proc->prev->next = proc->next; @@ -824,6 +829,7 @@ enum { }; __attribute_noinline__ +__attribute_pure__ static uint32_t gw_hash(const char *str, const uint32_t len, uint32_t hash) { @@ -1013,14 +1019,9 @@ static int gw_establish_connection(request_st * const r, gw_host *host, gw_proc return 0; } -static void gw_restart_dead_procs(gw_host * const host, log_error_st * const errh, const int debug, const int trigger) { - for (gw_proc *proc = host->first; proc; proc = proc->next) { - if (debug > 2) { - log_error(errh, __FILE__, __LINE__, - "proc: %s %d %d %d %d", proc->connection_name->ptr, - proc->state, proc->is_local, proc->load, proc->pid); - } - +__attribute_cold__ +__attribute_noinline__ +static void gw_restart_dead_proc(gw_host * const host, log_error_st * const errh, const int debug, const int trigger, gw_proc * const proc) { switch (proc->state) { case PROC_STATE_RUNNING: break; @@ -1079,6 +1080,17 @@ static void gw_restart_dead_procs(gw_host * const host, log_error_st * const err } break; } +} + +static void gw_restart_dead_procs(gw_host * const host, log_error_st * const errh, const int debug, const int trigger) { + for (gw_proc *proc = host->first; proc; proc = proc->next) { + if (debug > 2) { + log_error(errh, __FILE__, __LINE__, + "proc: %s %d %d %d %d", proc->connection_name->ptr, + proc->state, proc->is_local, proc->load, proc->pid); + } + if (proc->state != PROC_STATE_RUNNING) + gw_restart_dead_proc(host, errh, debug, trigger, proc); } } @@ -1853,6 +1865,7 @@ handler_t gw_handle_request_reset(request_st * const r, void *p_d) { } +__attribute_cold__ static void gw_conditional_tcp_fin(gw_handler_ctx * const hctx, request_st * const r) { /*assert(r->conf.stream_request_body & FDEVENT_STREAM_REQUEST_TCP_FIN);*/ if (!chunkqueue_is_empty(&hctx->wb))return; |