annotate src/os/unix/ngx_process.c @ 7025:7206c3630310

HTTP/2: don't send SETTINGS ACK before already queued DATA frames. Previously, SETTINGS ACK was sent immediately upon receipt of SETTINGS frame, before already queued DATA frames created using old SETTINGS. This incorrect behavior was source of interoperability issues, because peers rely on the fact that new SETTINGS are in effect after receiving SETTINGS ACK. Reported by Feng Li. Signed-off-by: Piotr Sikora <piotrsikora@google.com>
author Piotr Sikora <piotrsikora@google.com>
date Fri, 02 Jun 2017 15:05:32 +0300
parents f38647c651a8
children 8b84d60ef13d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4315
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 391
diff changeset
6
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
306
6b91bfbc4123 nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 279
diff changeset
10 #include <ngx_event.h>
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
11 #include <ngx_channel.h>
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
14 typedef struct {
3681
81677b7cdb2a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3475
diff changeset
15 int signo;
81677b7cdb2a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3475
diff changeset
16 char *signame;
81677b7cdb2a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3475
diff changeset
17 char *name;
6985
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
18 void (*handler)(int signo, siginfo_t *siginfo, void *ucontext);
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
19 } ngx_signal_t;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
20
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
21
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
22
279
b79f021a644a nginx-0.0.2-2004-03-04-19:34:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 272
diff changeset
23 static void ngx_execute_proc(ngx_cycle_t *cycle, void *data);
6985
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
24 static void ngx_signal_handler(int signo, siginfo_t *siginfo, void *ucontext);
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
25 static void ngx_process_get_status(void);
4311
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
26 static void ngx_unlock_mutexes(ngx_pid_t pid);
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
27
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
28
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
29 int ngx_argc;
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
30 char **ngx_argv;
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
31 char **ngx_os_argv;
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
32
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
33 ngx_int_t ngx_process_slot;
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
34 ngx_socket_t ngx_channel;
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
35 ngx_int_t ngx_last_process;
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
36 ngx_process_t ngx_processes[NGX_MAX_PROCESSES];
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
39 ngx_signal_t signals[] = {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
40 { ngx_signal_value(NGX_RECONFIGURE_SIGNAL),
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
41 "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
42 "reload",
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
43 ngx_signal_handler },
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
44
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
45 { ngx_signal_value(NGX_REOPEN_SIGNAL),
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
46 "SIG" ngx_value(NGX_REOPEN_SIGNAL),
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
47 "reopen",
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
48 ngx_signal_handler },
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
49
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
50 { ngx_signal_value(NGX_NOACCEPT_SIGNAL),
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
51 "SIG" ngx_value(NGX_NOACCEPT_SIGNAL),
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
52 "",
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
53 ngx_signal_handler },
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
54
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
55 { ngx_signal_value(NGX_TERMINATE_SIGNAL),
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
56 "SIG" ngx_value(NGX_TERMINATE_SIGNAL),
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
57 "stop",
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
58 ngx_signal_handler },
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
59
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
60 { ngx_signal_value(NGX_SHUTDOWN_SIGNAL),
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
61 "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
62 "quit",
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
63 ngx_signal_handler },
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
64
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
65 { ngx_signal_value(NGX_CHANGEBIN_SIGNAL),
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
66 "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
67 "",
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
68 ngx_signal_handler },
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
69
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
70 { SIGALRM, "SIGALRM", "", ngx_signal_handler },
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
71
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
72 { SIGINT, "SIGINT", "", ngx_signal_handler },
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
73
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
74 { SIGIO, "SIGIO", "", ngx_signal_handler },
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
75
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
76 { SIGCHLD, "SIGCHLD", "", ngx_signal_handler },
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
77
6985
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
78 { SIGSYS, "SIGSYS, SIG_IGN", "", NULL },
3045
46b207c9dafd ignore SIGSYS
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
79
6985
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
80 { SIGPIPE, "SIGPIPE, SIG_IGN", "", NULL },
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
81
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
82 { 0, NULL, "", NULL }
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
83 };
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
84
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
85
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
86 ngx_pid_t
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
87 ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data,
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
88 char *name, ngx_int_t respawn)
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 {
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
90 u_long on;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
91 ngx_pid_t pid;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
92 ngx_int_t s;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
93
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
94 if (respawn >= 0) {
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
95 s = respawn;
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
96
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
97 } else {
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
98 for (s = 0; s < ngx_last_process; s++) {
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
99 if (ngx_processes[s].pid == -1) {
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
100 break;
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
101 }
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
102 }
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
103
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
104 if (s == NGX_MAX_PROCESSES) {
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
105 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
106 "no more than %d processes can be spawned",
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
107 NGX_MAX_PROCESSES);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
108 return NGX_INVALID_PID;
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
109 }
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
110 }
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
111
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
112
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
113 if (respawn != NGX_PROCESS_DETACHED) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
114
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
115 /* Solaris 9 still has no AF_LOCAL */
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
116
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
117 if (socketpair(AF_UNIX, SOCK_STREAM, 0, ngx_processes[s].channel) == -1)
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
118 {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
119 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
120 "socketpair() failed while spawning \"%s\"", name);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
121 return NGX_INVALID_PID;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
122 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
123
391
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
124 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
125 "channel %d:%d",
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
126 ngx_processes[s].channel[0],
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
127 ngx_processes[s].channel[1]);
b670db10cbbd nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 389
diff changeset
128
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
129 if (ngx_nonblocking(ngx_processes[s].channel[0]) == -1) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
130 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
131 ngx_nonblocking_n " failed while spawning \"%s\"",
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
132 name);
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
133 ngx_close_channel(ngx_processes[s].channel, cycle->log);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
134 return NGX_INVALID_PID;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
135 }
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
136
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
137 if (ngx_nonblocking(ngx_processes[s].channel[1]) == -1) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
138 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
139 ngx_nonblocking_n " failed while spawning \"%s\"",
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
140 name);
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
141 ngx_close_channel(ngx_processes[s].channel, cycle->log);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
142 return NGX_INVALID_PID;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
143 }
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
144
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
145 on = 1;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
146 if (ioctl(ngx_processes[s].channel[0], FIOASYNC, &on) == -1) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
147 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
148 "ioctl(FIOASYNC) failed while spawning \"%s\"", name);
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
149 ngx_close_channel(ngx_processes[s].channel, cycle->log);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
150 return NGX_INVALID_PID;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
151 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
152
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
153 if (fcntl(ngx_processes[s].channel[0], F_SETOWN, ngx_pid) == -1) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
154 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
155 "fcntl(F_SETOWN) failed while spawning \"%s\"", name);
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
156 ngx_close_channel(ngx_processes[s].channel, cycle->log);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
157 return NGX_INVALID_PID;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
158 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
159
366
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
160 if (fcntl(ngx_processes[s].channel[0], F_SETFD, FD_CLOEXEC) == -1) {
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
161 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
162 "fcntl(FD_CLOEXEC) failed while spawning \"%s\"",
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
163 name);
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
164 ngx_close_channel(ngx_processes[s].channel, cycle->log);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
165 return NGX_INVALID_PID;
366
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
166 }
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
167
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
168 if (fcntl(ngx_processes[s].channel[1], F_SETFD, FD_CLOEXEC) == -1) {
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
169 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
170 "fcntl(FD_CLOEXEC) failed while spawning \"%s\"",
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
171 name);
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
172 ngx_close_channel(ngx_processes[s].channel, cycle->log);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
173 return NGX_INVALID_PID;
366
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
174 }
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
175
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
176 ngx_channel = ngx_processes[s].channel[1];
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
177
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
178 } else {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
179 ngx_processes[s].channel[0] = -1;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
180 ngx_processes[s].channel[1] = -1;
360
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 355
diff changeset
181 }
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 355
diff changeset
182
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 355
diff changeset
183 ngx_process_slot = s;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
184
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 pid = fork();
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
188 switch (pid) {
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
189
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
190 case -1:
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
191 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
192 "fork() failed while spawning \"%s\"", name);
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 360
diff changeset
193 ngx_close_channel(ngx_processes[s].channel, cycle->log);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
194 return NGX_INVALID_PID;
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
195
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196 case 0:
249
2a0540287298 nginx-0.0.2-2004-02-03-19:43:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 248
diff changeset
197 ngx_pid = ngx_getpid();
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
198 proc(cycle, data);
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
199 break;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
200
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201 default:
195
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 191
diff changeset
202 break;
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203 }
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
205 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start %s %P", name, pid);
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
206
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
207 ngx_processes[s].pid = pid;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
208 ngx_processes[s].exited = 0;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
209
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
210 if (respawn >= 0) {
225
2e9a8a14a0cf nginx-0.0.1-2004-01-13-19:43:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 224
diff changeset
211 return pid;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
212 }
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
214 ngx_processes[s].proc = proc;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
215 ngx_processes[s].data = data;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
216 ngx_processes[s].name = name;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
217 ngx_processes[s].exiting = 0;
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
218
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
219 switch (respawn) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
220
3016
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
221 case NGX_PROCESS_NORESPAWN:
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
222 ngx_processes[s].respawn = 0;
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
223 ngx_processes[s].just_spawn = 0;
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
224 ngx_processes[s].detached = 0;
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
225 break;
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
226
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
227 case NGX_PROCESS_JUST_SPAWN:
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
228 ngx_processes[s].respawn = 0;
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
229 ngx_processes[s].just_spawn = 1;
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
230 ngx_processes[s].detached = 0;
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
231 break;
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
232
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
233 case NGX_PROCESS_RESPAWN:
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
234 ngx_processes[s].respawn = 1;
3016
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
235 ngx_processes[s].just_spawn = 0;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
236 ngx_processes[s].detached = 0;
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
237 break;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
238
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
239 case NGX_PROCESS_JUST_RESPAWN:
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
240 ngx_processes[s].respawn = 1;
3016
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
241 ngx_processes[s].just_spawn = 1;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
242 ngx_processes[s].detached = 0;
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
243 break;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
244
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
245 case NGX_PROCESS_DETACHED:
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
246 ngx_processes[s].respawn = 0;
3016
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2738
diff changeset
247 ngx_processes[s].just_spawn = 0;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
248 ngx_processes[s].detached = 1;
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
249 break;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
250 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 306
diff changeset
251
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
252 if (s == ngx_last_process) {
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
253 ngx_last_process++;
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
254 }
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255
225
2e9a8a14a0cf nginx-0.0.1-2004-01-13-19:43:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 224
diff changeset
256 return pid;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
257 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
258
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
259
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
260 ngx_pid_t
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
261 ngx_execute(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx)
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
262 {
279
b79f021a644a nginx-0.0.2-2004-03-04-19:34:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 272
diff changeset
263 return ngx_spawn_process(cycle, ngx_execute_proc, ctx, ctx->name,
226
b0c1e21e68db nginx-0.0.1-2004-01-14-00:33:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 225
diff changeset
264 NGX_PROCESS_DETACHED);
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 }
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
268 static void
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
269 ngx_execute_proc(ngx_cycle_t *cycle, void *data)
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
270 {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
271 ngx_exec_ctx_t *ctx = data;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
272
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
273 if (execve(ctx->path, ctx->argv, ctx->envp) == -1) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
274 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
275 "execve() failed while executing %s \"%s\"",
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
276 ctx->name, ctx->path);
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
277 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
278
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
279 exit(1);
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
280 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
281
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
282
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
283 ngx_int_t
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
284 ngx_init_signals(ngx_log_t *log)
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
285 {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
286 ngx_signal_t *sig;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
287 struct sigaction sa;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
288
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
289 for (sig = signals; sig->signo != 0; sig++) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
290 ngx_memzero(&sa, sizeof(struct sigaction));
6985
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
291
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
292 if (sig->handler) {
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
293 sa.sa_sigaction = sig->handler;
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
294 sa.sa_flags = SA_SIGINFO;
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
295
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
296 } else {
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
297 sa.sa_handler = SIG_IGN;
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
298 }
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
299
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
300 sigemptyset(&sa.sa_mask);
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
301 if (sigaction(sig->signo, &sa, NULL) == -1) {
5244
593d344999f5 Valgrind: sigaction() failure now ignored.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4889
diff changeset
302 #if (NGX_VALGRIND)
593d344999f5 Valgrind: sigaction() failure now ignored.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4889
diff changeset
303 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
593d344999f5 Valgrind: sigaction() failure now ignored.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4889
diff changeset
304 "sigaction(%s) failed, ignored", sig->signame);
593d344999f5 Valgrind: sigaction() failure now ignored.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4889
diff changeset
305 #else
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
306 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
307 "sigaction(%s) failed", sig->signame);
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
308 return NGX_ERROR;
5244
593d344999f5 Valgrind: sigaction() failure now ignored.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4889
diff changeset
309 #endif
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
310 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
311 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
312
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
313 return NGX_OK;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
314 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
315
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
316
6932
e54c336d95aa Added missing "static" specifier found by gcc -Wtraditional.
Ruslan Ermilov <ru@nginx.com>
parents: 6483
diff changeset
317 static void
6985
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
318 ngx_signal_handler(int signo, siginfo_t *siginfo, void *ucontext)
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
319 {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
320 char *action;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
321 ngx_int_t ignore;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
322 ngx_err_t err;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
323 ngx_signal_t *sig;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
324
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
325 ignore = 0;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
326
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
327 err = ngx_errno;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
328
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
329 for (sig = signals; sig->signo != 0; sig++) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
330 if (sig->signo == signo) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
331 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
332 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
333 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
334
3475
ab353d7dc182 *) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents: 3474
diff changeset
335 ngx_time_sigsafe_update();
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
336
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
337 action = "";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
338
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
339 switch (ngx_process) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
340
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
341 case NGX_PROCESS_MASTER:
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
342 case NGX_PROCESS_SINGLE:
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
343 switch (signo) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
344
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
345 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
346 ngx_quit = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
347 action = ", shutting down";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
348 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
349
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
350 case ngx_signal_value(NGX_TERMINATE_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
351 case SIGINT:
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
352 ngx_terminate = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
353 action = ", exiting";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
354 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
355
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
356 case ngx_signal_value(NGX_NOACCEPT_SIGNAL):
4019
5364d2e711cc SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents: 3787
diff changeset
357 if (ngx_daemonized) {
5364d2e711cc SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents: 3787
diff changeset
358 ngx_noaccept = 1;
5364d2e711cc SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents: 3787
diff changeset
359 action = ", stop accepting connections";
5364d2e711cc SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents: 3787
diff changeset
360 }
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
361 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
362
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
363 case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
364 ngx_reconfigure = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
365 action = ", reconfiguring";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
366 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
367
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
368 case ngx_signal_value(NGX_REOPEN_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
369 ngx_reopen = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
370 action = ", reopening logs";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
371 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
372
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
373 case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
374 if (getppid() > 1 || ngx_new_binary > 0) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
375
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
376 /*
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
377 * Ignore the signal in the new binary if its parent is
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
378 * not the init process, i.e. the old binary's process
698
deb2ce14a500 fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
379 * is still running. Or ignore the signal in the old binary's
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
380 * process if the new binary's process is already running.
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
381 */
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
382
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
383 action = ", ignoring";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
384 ignore = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
385 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
386 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
387
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
388 ngx_change_binary = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
389 action = ", changing binary";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
390 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
391
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
392 case SIGALRM:
3048
846d0e2fa483 twice termination delay only after SIGALRM, otherwise many separate SIGCHLD
Igor Sysoev <igor@sysoev.ru>
parents: 3045
diff changeset
393 ngx_sigalrm = 1;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
394 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
395
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
396 case SIGIO:
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
397 ngx_sigio = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
398 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
399
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
400 case SIGCHLD:
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
401 ngx_reap = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
402 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
403 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
404
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
405 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
406
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
407 case NGX_PROCESS_WORKER:
3358
f94e8ff65aa2 add NGX_PROCESS_HELPER process status
Igor Sysoev <igor@sysoev.ru>
parents: 3048
diff changeset
408 case NGX_PROCESS_HELPER:
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
409 switch (signo) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
410
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
411 case ngx_signal_value(NGX_NOACCEPT_SIGNAL):
4019
5364d2e711cc SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents: 3787
diff changeset
412 if (!ngx_daemonized) {
5364d2e711cc SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents: 3787
diff changeset
413 break;
5364d2e711cc SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents: 3787
diff changeset
414 }
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
415 ngx_debug_quit = 1;
6994
f38647c651a8 Added missing "fall through" comments (ticket #1259).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6985
diff changeset
416 /* fall through */
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
417 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
418 ngx_quit = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
419 action = ", shutting down";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
420 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
421
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
422 case ngx_signal_value(NGX_TERMINATE_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
423 case SIGINT:
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
424 ngx_terminate = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
425 action = ", exiting";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
426 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
427
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
428 case ngx_signal_value(NGX_REOPEN_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
429 ngx_reopen = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
430 action = ", reopening logs";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
431 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
432
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
433 case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
434 case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
435 case SIGIO:
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
436 action = ", ignoring";
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
437 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
438 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
439
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
440 break;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
441 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
442
6985
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
443 if (siginfo && siginfo->si_pid) {
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
444 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
445 "signal %d (%s) received from %P%s",
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
446 signo, sig->signame, siginfo->si_pid, action);
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
447
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
448 } else {
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
449 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
450 "signal %d (%s) received%s",
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
451 signo, sig->signame, action);
23ecffd5bcfe Core: signal sender pid logging.
Igor Sysoev <igor@sysoev.ru>
parents: 6932
diff changeset
452 }
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
453
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
454 if (ignore) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
455 ngx_log_error(NGX_LOG_CRIT, ngx_cycle->log, 0,
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
456 "the changing binary signal is ignored: "
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
457 "you should shutdown or terminate "
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
458 "before either old or new binary's process");
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
459 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
460
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
461 if (signo == SIGCHLD) {
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
462 ngx_process_get_status();
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
463 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
464
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
465 ngx_set_errno(err);
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
466 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
467
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
468
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 515
diff changeset
469 static void
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
470 ngx_process_get_status(void)
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
471 {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
472 int status;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
473 char *process;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
474 ngx_pid_t pid;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
475 ngx_err_t err;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
476 ngx_int_t i;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
477 ngx_uint_t one;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
478
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
479 one = 0;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
480
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
481 for ( ;; ) {
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
482 pid = waitpid(-1, &status, WNOHANG);
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
483
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
484 if (pid == 0) {
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
485 return;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
486 }
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
487
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
488 if (pid == -1) {
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
489 err = ngx_errno;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
490
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
491 if (err == NGX_EINTR) {
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
492 continue;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
493 }
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
494
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
495 if (err == NGX_ECHILD && one) {
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
496 return;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
497 }
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
498
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
499 /*
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
500 * Solaris always calls the signal handler for each exited process
943
cbe0292e53b3 lower the log level of the waitpid() ENOCHILD error on FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents: 698
diff changeset
501 * despite waitpid() may be already called for this process.
cbe0292e53b3 lower the log level of the waitpid() ENOCHILD error on FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents: 698
diff changeset
502 *
cbe0292e53b3 lower the log level of the waitpid() ENOCHILD error on FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents: 698
diff changeset
503 * When several processes exit at the same time FreeBSD may
cbe0292e53b3 lower the log level of the waitpid() ENOCHILD error on FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents: 698
diff changeset
504 * erroneously call the signal handler for exited process
1963
957085b56da3 grammar fix
Igor Sysoev <igor@sysoev.ru>
parents: 943
diff changeset
505 * despite waitpid() may be already called for this process.
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
506 */
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
507
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
508 if (err == NGX_ECHILD) {
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 3681
diff changeset
509 ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, err,
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 3681
diff changeset
510 "waitpid() failed");
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
511 return;
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
512 }
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
513
3787
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 3681
diff changeset
514 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, err,
e294f37401c0 use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents: 3681
diff changeset
515 "waitpid() failed");
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
516 return;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
517 }
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
518
306
6b91bfbc4123 nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 279
diff changeset
519
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
520 one = 1;
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 366
diff changeset
521 process = "unknown process";
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
522
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
523 for (i = 0; i < ngx_last_process; i++) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
524 if (ngx_processes[i].pid == pid) {
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
525 ngx_processes[i].status = status;
222
99df0edb63ed nginx-0.0.1-2004-01-09-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 221
diff changeset
526 ngx_processes[i].exited = 1;
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
527 process = ngx_processes[i].name;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
528 break;
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
529 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
530 }
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
531
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
532 if (WTERMSIG(status)) {
2494
693132294e21 AIX has no WCOREDUMP()
Igor Sysoev <igor@sysoev.ru>
parents: 1963
diff changeset
533 #ifdef WCOREDUMP
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
534 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
535 "%s %P exited on signal %d%s",
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
536 process, pid, WTERMSIG(status),
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
537 WCOREDUMP(status) ? " (core dumped)" : "");
2494
693132294e21 AIX has no WCOREDUMP()
Igor Sysoev <igor@sysoev.ru>
parents: 1963
diff changeset
538 #else
693132294e21 AIX has no WCOREDUMP()
Igor Sysoev <igor@sysoev.ru>
parents: 1963
diff changeset
539 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
693132294e21 AIX has no WCOREDUMP()
Igor Sysoev <igor@sysoev.ru>
parents: 1963
diff changeset
540 "%s %P exited on signal %d",
693132294e21 AIX has no WCOREDUMP()
Igor Sysoev <igor@sysoev.ru>
parents: 1963
diff changeset
541 process, pid, WTERMSIG(status));
693132294e21 AIX has no WCOREDUMP()
Igor Sysoev <igor@sysoev.ru>
parents: 1963
diff changeset
542 #endif
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
543
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
544 } else {
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
545 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
546 "%s %P exited with code %d",
218
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
547 process, pid, WEXITSTATUS(status));
05592fd7a436 nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
548 }
234
cd71b95716b4 nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 227
diff changeset
549
cd71b95716b4 nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 227
diff changeset
550 if (WEXITSTATUS(status) == 2 && ngx_processes[i].respawn) {
cd71b95716b4 nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 227
diff changeset
551 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
1963
957085b56da3 grammar fix
Igor Sysoev <igor@sysoev.ru>
parents: 943
diff changeset
552 "%s %P exited with fatal code %d "
4133
59b99f217c6d Replaced "can not" with "cannot" and "could not" in a bunch of places.
Ruslan Ermilov <ru@nginx.com>
parents: 4019
diff changeset
553 "and cannot be respawned",
1963
957085b56da3 grammar fix
Igor Sysoev <igor@sysoev.ru>
parents: 943
diff changeset
554 process, pid, WEXITSTATUS(status));
234
cd71b95716b4 nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 227
diff changeset
555 ngx_processes[i].respawn = 0;
cd71b95716b4 nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 227
diff changeset
556 }
4311
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
557
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
558 ngx_unlock_mutexes(pid);
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
559 }
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
560 }
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
561
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
562
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
563 static void
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
564 ngx_unlock_mutexes(ngx_pid_t pid)
4522
14411ee4d89f Whitespace fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
565 {
4311
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
566 ngx_uint_t i;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
567 ngx_shm_zone_t *shm_zone;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
568 ngx_list_part_t *part;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
569 ngx_slab_pool_t *sp;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
570
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
571 /*
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
572 * unlock the accept mutex if the abnormally exited process
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
573 * held it
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
574 */
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
575
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
576 if (ngx_accept_mutex_ptr) {
4315
424a1ac6af43 Added (void) as we intentionally ignore returned values.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4311
diff changeset
577 (void) ngx_shmtx_force_unlock(&ngx_accept_mutex, pid);
4311
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
578 }
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
579
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
580 /*
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
581 * unlock shared memory mutexes if held by the abnormally exited
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
582 * process
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
583 */
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
584
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
585 part = (ngx_list_part_t *) &ngx_cycle->shared_memory.part;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
586 shm_zone = part->elts;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
587
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
588 for (i = 0; /* void */ ; i++) {
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
589
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
590 if (i >= part->nelts) {
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
591 if (part->next == NULL) {
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
592 break;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
593 }
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
594 part = part->next;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
595 shm_zone = part->elts;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
596 i = 0;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
597 }
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
598
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
599 sp = (ngx_slab_pool_t *) shm_zone[i].shm.addr;
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
600
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
601 if (ngx_shmtx_force_unlock(&sp->mutex, pid)) {
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
602 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
603 "shared memory zone \"%V\" was locked by %P",
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
604 &shm_zone[i].shm.name, pid);
45272aab5eea Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4309
diff changeset
605 }
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
606 }
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
607 }
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
608
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
609
515
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
610 void
417a087c9c4d nginx-0.1.32-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
611 ngx_debug_point(void)
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
612 {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
613 ngx_core_conf_t *ccf;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
614
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
615 ccf = (ngx_core_conf_t *) ngx_get_conf(ngx_cycle->conf_ctx,
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
616 ngx_core_module);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
617
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
618 switch (ccf->debug_points) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
619
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
620 case NGX_DEBUG_POINTS_STOP:
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
621 raise(SIGSTOP);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
622 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
623
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
624 case NGX_DEBUG_POINTS_ABORT:
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
625 ngx_abort();
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
626 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
627 }
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
628
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
629
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
630 ngx_int_t
6483
3a50ccd94333 Fixed ngx_os_signal_process() prototype.
Ruslan Ermilov <ru@nginx.com>
parents: 6482
diff changeset
631 ngx_os_signal_process(ngx_cycle_t *cycle, char *name, ngx_pid_t pid)
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
632 {
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
633 ngx_signal_t *sig;
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
634
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
635 for (sig = signals; sig->signo != 0; sig++) {
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
636 if (ngx_strcmp(name, sig->name) == 0) {
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
637 if (kill(pid, sig->signo) != -1) {
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
638 return 0;
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
639 }
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
640
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
641 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
6483
3a50ccd94333 Fixed ngx_os_signal_process() prototype.
Ruslan Ermilov <ru@nginx.com>
parents: 6482
diff changeset
642 "kill(%P, %d) failed", pid, sig->signo);
2738
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
643 }
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
644 }
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
645
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
646 return 1;
ae81441e23f4 implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents: 2494
diff changeset
647 }