Lines Matching refs:proc

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
59 if (proc) { in gw_status_get_counter()
62 len = li_utostrn(label+llen, LI_ITOSTRING_LENGTH, proc->id); 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
80 ++(*proc->stats_connected); /* "gw.backend...connected" */ in gw_proc_connected_inc()
83 static void gw_proc_load_inc(gw_host *host, gw_proc *proc) { in gw_proc_load_inc() argument
84 *proc->stats_load = ++proc->load; /* "gw.backend...load" */ in gw_proc_load_inc()
88 static void gw_proc_load_dec(gw_host *host, gw_proc *proc) { in gw_proc_load_dec() argument
89 *proc->stats_load = --proc->load; /* "gw.backend...load" */ in gw_proc_load_dec()
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()
105 proc->stats_connected = in gw_status_init_proc()
106 gw_status_get_counter(host, proc, CONST_STR_LEN(".connected")); in gw_status_init_proc()
107 *proc->stats_connected = 0; in gw_status_init_proc()
108 proc->stats_load = in gw_status_init_proc()
109 gw_status_get_counter(host, proc, CONST_STR_LEN(".load")); in gw_status_init_proc()
110 *proc->stats_load = 0; in gw_status_init_proc()
125 static void gw_proc_set_state(gw_host *host, gw_proc *proc, int state) { in gw_proc_set_state() argument
126 if ((int)proc->state == state) return; in gw_proc_set_state()
127 if (proc->state == PROC_STATE_RUNNING) { in gw_proc_set_state()
132 proc->state = state; in gw_proc_set_state()
138 static void gw_proc_init_portpath(gw_host *host, gw_proc *proc) { in gw_proc_init_portpath() argument
140 proc->port = host->port + proc->id; in gw_proc_init_portpath()
144 if (!proc->unixsocket) in gw_proc_init_portpath()
145 proc->unixsocket = buffer_init(); in gw_proc_init_portpath()
148 buffer_copy_buffer(proc->unixsocket, host->unixsocket); in gw_proc_init_portpath()
150 buffer_clear(proc->unixsocket); in gw_proc_init_portpath()
151 buffer_append_str2(proc->unixsocket, BUF_PTR_LEN(host->unixsocket), in gw_proc_init_portpath()
153 buffer_append_int(proc->unixsocket, proc->id); in gw_proc_init_portpath()
161 gw_proc *proc = ck_calloc(1, sizeof(*proc)); in gw_proc_init() local
164 proc->connection_name = buffer_init(); in gw_proc_init()
166 proc->prev = NULL; in gw_proc_init()
167 proc->next = NULL; in gw_proc_init()
168 proc->state = PROC_STATE_DIED; in gw_proc_init()
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()
174 return proc; in gw_proc_init()
179 static void gw_proc_free(gw_proc *proc) { in gw_proc_free() argument
180 if (!proc) return; in gw_proc_free()
182 gw_proc_free(proc->next); in gw_proc_free()
184 buffer_free(proc->unixsocket); in gw_proc_free()
185 buffer_free(proc->connection_name); in gw_proc_free()
186 free(proc->saddr); in gw_proc_free()
188 free(proc); in gw_proc_free()
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()
260 proc->last_used = log_monotonic_secs; in gw_proc_connect_success()
265 proc->pid, proc->connection_name->ptr, proc->load); 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
275 "establishing connection failed: socket: %s", proc->connection_name->ptr); in gw_proc_connect_error()
277 if (!proc->is_local) { in gw_proc_connect_error()
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()
281 else if (proc->pid == pid && proc->state == PROC_STATE_RUNNING) { in gw_proc_connect_error()
307 "backend %s is %d", proc->connection_name->ptr, proc->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()
340 proc->pid, proc->connection_name->ptr, proc->load); 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
346 if (log_monotonic_secs <= proc->disabled_until) return; in gw_proc_check_enable()
347 if (proc->state != PROC_STATE_OVERLOADED) return; in gw_proc_check_enable()
349 gw_proc_set_state(host, proc, PROC_STATE_RUNNING); in gw_proc_check_enable()
353 proc->connection_name->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
361 if (proc->state != PROC_STATE_KILLED) { in gw_proc_waitpid_log()
364 WEXITSTATUS(status), proc->connection_name->ptr); 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
381 if (!proc->is_local) return 0; in gw_proc_waitpid()
382 if (proc->pid <= 0) return 0; in gw_proc_waitpid()
384 rc = fdevent_waitpid(proc->pid, &status, 1); in gw_proc_waitpid()
392 "pid %d %d not found", proc->pid, proc->state); in gw_proc_waitpid()
395 gw_proc_waitpid_log(host, proc, errh, status); in gw_proc_waitpid()
398 proc->pid = 0; in gw_proc_waitpid()
399 if (proc->state != PROC_STATE_KILLED) in gw_proc_waitpid()
400 proc->disabled_until = log_monotonic_secs; 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
410 if (proc->unixsocket) { in gw_proc_sockaddr_init()
411 if (1 != sock_addr_from_str_hints(&addr,&addrlen,proc->unixsocket->ptr, in gw_proc_sockaddr_init()
416 buffer_clear(proc->connection_name); in gw_proc_sockaddr_init()
417 buffer_append_str2(proc->connection_name, in gw_proc_sockaddr_init()
419 BUF_PTR_LEN(proc->unixsocket)); in gw_proc_sockaddr_init()
427 0, proc->port, errh)) { in gw_proc_sockaddr_init()
440 buffer_clear(proc->connection_name); in gw_proc_sockaddr_init()
441 buffer_append_str3(proc->connection_name, in gw_proc_sockaddr_init()
445 buffer_append_int(proc->connection_name, proc->port); in gw_proc_sockaddr_init()
448 if (NULL != proc->saddr && proc->saddrlen < addrlen) { in gw_proc_sockaddr_init()
449 free(proc->saddr); in gw_proc_sockaddr_init()
450 proc->saddr = NULL; in gw_proc_sockaddr_init()
452 if (NULL == proc->saddr) { in gw_proc_sockaddr_init()
453 proc->saddr = (struct sockaddr *)ck_malloc(addrlen); in gw_proc_sockaddr_init()
455 proc->saddrlen = addrlen; in gw_proc_sockaddr_init()
456 memcpy(proc->saddr, &addr, addrlen); 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
496 proc->port, proc->unixsocket ? proc->unixsocket->ptr : ""); in gw_spawn_connection()
499 gw_fd = fdevent_socket_cloexec(proc->saddr->sa_family, SOCK_STREAM, 0); in gw_spawn_connection()
506 status = connect(gw_fd, proc->saddr, proc->saddrlen); in gw_spawn_connection()
509 if (-1 == status && errno != ENOENT && proc->unixsocket) { in gw_spawn_connection()
511 "connect %s", proc->unixsocket->ptr); in gw_spawn_connection()
512 unlink(proc->unixsocket->ptr); in gw_spawn_connection()
523 gw_fd = fdevent_socket_cloexec(proc->saddr->sa_family, SOCK_STREAM, 0); in gw_spawn_connection()
536 if (-1 == bind(gw_fd, proc->saddr, proc->saddrlen)) { in gw_spawn_connection()
538 "bind failed for: %s", proc->connection_name->ptr); in gw_spawn_connection()
610 proc->pid = (dfd >= 0) in gw_spawn_connection()
620 if (-1 == proc->pid) { in gw_spawn_connection()
623 proc->pid = 0; in gw_spawn_connection()
624 proc->disabled_until = log_monotonic_secs; in gw_spawn_connection()
629 proc->last_used = log_monotonic_secs; in gw_spawn_connection()
630 proc->is_local = 1; in gw_spawn_connection()
636 if (0 != gw_proc_waitpid(host, proc, errh)) { in gw_spawn_connection()
647 proc->is_local = 0; in gw_spawn_connection()
648 proc->pid = 0; in gw_spawn_connection()
653 proc->connection_name->ptr); in gw_spawn_connection()
657 gw_proc_set_state(host, proc, PROC_STATE_RUNNING); in gw_spawn_connection()
663 gw_proc *proc; in gw_proc_spawn() local
664 for (proc = host->unused_procs; proc; proc = proc->next) { in gw_proc_spawn()
666 if (proc->pid > 0) continue; in gw_proc_spawn()
668 if (proc->disabled_until >= log_monotonic_secs) return; in gw_proc_spawn()
671 if (proc) { in gw_proc_spawn()
672 if (proc == host->unused_procs) in gw_proc_spawn()
673 host->unused_procs = proc->next; in gw_proc_spawn()
675 proc->prev->next = proc->next; in gw_proc_spawn()
677 if (proc->next) { in gw_proc_spawn()
678 proc->next->prev = proc->prev; in gw_proc_spawn()
679 proc->next = NULL; in gw_proc_spawn()
682 proc->prev = NULL; 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()
694 gw_proc_free(proc); 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()
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()
705 host->first->prev = proc; in gw_proc_spawn()
706 host->first = proc; in gw_proc_spawn()
712 static void gw_proc_kill(gw_host *host, gw_proc *proc) { in gw_proc_kill() argument
713 if (proc->next) proc->next->prev = proc->prev; in gw_proc_kill()
714 if (proc->prev) proc->prev->next = proc->next; in gw_proc_kill()
715 else host->first = proc->next; in gw_proc_kill()
718 proc->prev = NULL; in gw_proc_kill()
719 proc->next = host->unused_procs; in gw_proc_kill()
720 proc->disabled_until = 0; 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()
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
970 if (-1 == connect(gw_fd, proc->saddr, proc->saddrlen)) { in gw_establish_connection()
977 proc->connection_name->ptr); in gw_establish_connection()
982 gw_proc_connect_error(r, host, proc, pid, errnum, debug); in gw_establish_connection()
997 … const host, log_error_st * const errh, const int debug, const int trigger, gw_proc * const proc) { in gw_restart_dead_proc() argument
998 switch (proc->state) { in gw_restart_dead_proc()
1002 gw_proc_check_enable(host, proc, errh); in gw_restart_dead_proc()
1005 if (trigger && ++proc->disabled_until > 4) { in gw_restart_dead_proc()
1006 int sig = (proc->disabled_until <= 8) in gw_restart_dead_proc()
1008 : proc->disabled_until <= 16 ? SIGTERM : SIGKILL; in gw_restart_dead_proc()
1009 kill(proc->pid, sig); 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()
1022 if (proc->state != PROC_STATE_DIED) break; in gw_restart_dead_proc()
1032 if (proc->load != 0) break; in gw_restart_dead_proc()
1035 if (proc->disabled_until >= log_monotonic_secs) break; 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()
1059 for (gw_proc *proc = host->first; proc; proc = proc->next) { in gw_restart_dead_procs() local
1062 "proc: %s %d %d %d %d", proc->connection_name->ptr, in gw_restart_dead_procs()
1063 proc->state, proc->is_local, proc->load, proc->pid); in gw_restart_dead_procs()
1065 if (proc->state != PROC_STATE_RUNNING) in gw_restart_dead_procs()
1066 gw_restart_dead_proc(host, errh, debug, trigger, proc); in gw_restart_dead_procs()
1091 hctx->proc = NULL; in handler_ctx_init()
1119 hctx->proc = NULL; in handler_ctx_clear()
1157 gw_proc *proc; in gw_plugin_config_free() local
1160 for (proc = host->first; proc; proc = proc->next) { in gw_plugin_config_free()
1161 if (proc->pid > 0) { in gw_plugin_config_free()
1162 kill(proc->pid, host->kill_signal); in gw_plugin_config_free()
1165 if (proc->is_local && proc->unixsocket) { in gw_plugin_config_free()
1166 unlink(proc->unixsocket->ptr); in gw_plugin_config_free()
1170 for (proc = host->unused_procs; proc; proc = proc->next) { in gw_plugin_config_free()
1171 if (proc->pid > 0) { in gw_plugin_config_free()
1172 kill(proc->pid, host->kill_signal); in gw_plugin_config_free()
1174 if (proc->is_local && proc->unixsocket) { in gw_plugin_config_free()
1175 unlink(proc->unixsocket->ptr); in gw_plugin_config_free()
1639 gw_proc * const proc = gw_proc_init(host); in gw_set_defaults_backend() local
1652 if (0 != gw_proc_sockaddr_init(host, proc, srv->errh)) { in gw_set_defaults_backend()
1653 gw_proc_free(proc); in gw_set_defaults_backend()
1658 && gw_spawn_connection(host, proc, srv->errh, s->debug)) { in gw_set_defaults_backend()
1661 gw_proc_free(proc); 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()
1688 gw_proc * const proc = gw_proc_init(host); in gw_set_defaults_backend() local
1689 host->first = proc; 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()
1811 if (hctx->proc) { in gw_backend_close()
1812 gw_proc_release(hctx->host, hctx->proc, hctx->conf.debug, in gw_backend_close()
1814 hctx->proc = NULL; in gw_backend_close()
1909 hctx->proc = NULL; in gw_write_request()
1911 for (gw_proc *proc = hctx->host->first; proc; proc = proc->next) { in gw_write_request() local
1912 if (proc->state == PROC_STATE_RUNNING) { in gw_write_request()
1913 hctx->proc = proc; in gw_write_request()
1919 if (hctx->proc == NULL) { in gw_write_request()
1924 for (gw_proc *proc = hctx->proc->next; proc; proc = proc->next) { in gw_write_request() local
1925 if (proc->state != PROC_STATE_RUNNING) continue; in gw_write_request()
1926 if (proc->load < hctx->proc->load) hctx->proc = proc; in gw_write_request()
1929 gw_proc_load_inc(hctx->host, hctx->proc); in gw_write_request()
1943 if (hctx->proc->is_local) { in gw_write_request()
1944 hctx->pid = hctx->proc->pid; 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()
2031 hctx->proc->connection_name->ptr); in gw_write_request()
2039 hctx->write_ts = hctx->proc->last_used = log_monotonic_secs; in gw_write_request()
2107 if (hctx->proc && hctx->proc->is_local) { in gw_write_error()
2307 …_t gw_recv_response_error(gw_handler_ctx * const hctx, request_st * const r, gw_proc * const proc);
2322 gw_proc * const proc = hctx->proc; in gw_recv_response() local
2332 hctx->read_ts = proc->last_used = log_monotonic_secs; in gw_recv_response()
2335 /*hctx->read_ts =*/ proc->last_used = log_monotonic_secs; in gw_recv_response()
2345 return gw_recv_response_error(hctx, r, proc); in gw_recv_response()
2351 …r_t gw_recv_response_error(gw_handler_ctx * const hctx, request_st * const r, gw_proc * const proc) in gw_recv_response_error() argument
2355 if (proc->is_local && 1 == proc->load && proc->pid == hctx->pid in gw_recv_response_error()
2356 && proc->state != PROC_STATE_DIED in gw_recv_response_error()
2361 if (proc->disabled_until < log_monotonic_secs in gw_recv_response_error()
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()
2383 proc->connection_name->ptr, in gw_recv_response_error()
2392 (long long)hctx->wb.bytes_out, proc->connection_name->ptr, in gw_recv_response_error()
2399 proc->connection_name->ptr, in gw_recv_response_error()
2444 gw_proc *proc = hctx->proc; in gw_process_fdevent() local
2449 proc->connection_name->ptr, hctx->state); in gw_process_fdevent()
2639 hctx->proc = NULL; in gw_check_extension()
2690 gw_proc_connect_error(r, hctx->host, hctx->proc, hctx->pid, in gw_handle_trigger_hctx_timeout()
2710 msg, hctx->proc->connection_name->ptr, hctx->fd); in gw_handle_trigger_hctx_timeout()
2764 gw_proc *proc; in gw_handle_trigger_host() local
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()
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()
2798 for (proc = host->first; proc; proc = proc->next) { in gw_handle_trigger_host()
2800 if (0 != proc->load) continue; in gw_handle_trigger_host()
2801 if (proc->pid <= 0) continue; in gw_handle_trigger_host()
2802 if (proc->last_used >= idle_timestamp) continue; in gw_handle_trigger_host()
2808 proc->unixsocket ? proc->unixsocket->ptr : "", proc->pid); 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()
2839 for (gw_proc *proc = host->first; proc; proc = proc->next) { in gw_handle_trigger_exts_wkr() local
2840 if (proc->state == PROC_STATE_OVERLOADED) in gw_handle_trigger_exts_wkr()
2841 gw_proc_check_enable(host, proc, errh); in gw_handle_trigger_exts_wkr()
2924 gw_proc *proc; in gw_handle_waitpid_cb() local
2925 for (proc = host->first; proc; proc = proc->next) { in gw_handle_waitpid_cb()
2926 if (!proc->is_local || proc->pid != pid) continue; 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()
2930 proc->pid = 0; in gw_handle_waitpid_cb()
2933 if (proc->disabled_until < cur_ts) { in gw_handle_waitpid_cb()
2936 if (proc->state != PROC_STATE_KILLED) in gw_handle_waitpid_cb()
2937 proc->disabled_until = cur_ts; 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()
2947 if (!proc->is_local || proc->pid != pid) continue; in gw_handle_waitpid_cb()
2949 gw_proc_waitpid_log(host, proc, errh, status); in gw_handle_waitpid_cb()
2950 if (proc->state != PROC_STATE_KILLED) in gw_handle_waitpid_cb()
2951 proc->disabled_until = cur_ts; in gw_handle_waitpid_cb()
2952 gw_proc_set_state(host, proc, PROC_STATE_DIED); in gw_handle_waitpid_cb()
2953 proc->pid = 0; in gw_handle_waitpid_cb()