annotate src/os/unix/ngx_process_cycle.c @ 7670:ccb5ff87ab3e

Cache: introduced min_free cache clearing. Clearing cache based on free space left on a file system is expected to allow better disk utilization in some cases, notably when disk space might be also used for something other than nginx cache (including nginx own temporary files) and while loading cache (when cache size might be inaccurate for a while, effectively disabling max_size cache clearing). Based on a patch by Adam Bambuch.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 22 Jun 2020 18:03:00 +0300
parents 7cbf6389194b
children 0215ec9aaa8a
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: 4403
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
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_event.h>
366
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
11 #include <ngx_channel.h>
309
2e899477243a nginx-0.0.3-2004-04-09-20:03:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 305
diff changeset
12
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
14 static void ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n,
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
15 ngx_int_t type);
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
16 static void ngx_start_cache_manager_processes(ngx_cycle_t *cycle,
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
17 ngx_uint_t respawn);
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
18 static void ngx_pass_open_channel(ngx_cycle_t *cycle, ngx_channel_t *ch);
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
19 static void ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo);
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1437
diff changeset
20 static ngx_uint_t ngx_reap_children(ngx_cycle_t *cycle);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
21 static void ngx_master_process_exit(ngx_cycle_t *cycle);
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data);
4912
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
23 static void ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
24 static void ngx_worker_process_exit(ngx_cycle_t *cycle);
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
25 static void ngx_channel_handler(ngx_event_t *ev);
2616
d19979e0d980 introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
26 static void ngx_cache_manager_process_cycle(ngx_cycle_t *cycle, void *data);
d19979e0d980 introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
27 static void ngx_cache_manager_process_handler(ngx_event_t *ev);
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
28 static void ngx_cache_loader_process_handler(ngx_event_t *ev);
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
31 ngx_uint_t ngx_process;
6151
b4cc553aafeb Introduced worker number, ngx_worker.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6127
diff changeset
32 ngx_uint_t ngx_worker;
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 ngx_pid_t ngx_pid;
7162
8b84d60ef13d Fixed "changing binary" when reaper is not init.
Ruslan Ermilov <ru@nginx.com>
parents: 6931
diff changeset
34 ngx_pid_t ngx_parent;
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 sig_atomic_t ngx_reap;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
37 sig_atomic_t ngx_sigio;
3048
846d0e2fa483 twice termination delay only after SIGALRM, otherwise many separate SIGCHLD
Igor Sysoev <igor@sysoev.ru>
parents: 3047
diff changeset
38 sig_atomic_t ngx_sigalrm;
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 sig_atomic_t ngx_terminate;
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 sig_atomic_t ngx_quit;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
41 sig_atomic_t ngx_debug_quit;
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
42 ngx_uint_t ngx_exiting;
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 sig_atomic_t ngx_reconfigure;
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 sig_atomic_t ngx_reopen;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
45
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 sig_atomic_t ngx_change_binary;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
47 ngx_pid_t ngx_new_binary;
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
48 ngx_uint_t ngx_inherited;
366
e411b1482ee3 nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 365
diff changeset
49 ngx_uint_t ngx_daemonized;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
50
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
51 sig_atomic_t ngx_noaccept;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
52 ngx_uint_t ngx_noaccepting;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
53 ngx_uint_t ngx_restart;
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
56 static u_char master_process[] = "master process";
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
57
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
58
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
59 static ngx_cache_manager_ctx_t ngx_cache_manager_ctx = {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
60 ngx_cache_manager_process_handler, "cache manager process", 0
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
61 };
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
62
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
63 static ngx_cache_manager_ctx_t ngx_cache_loader_ctx = {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
64 ngx_cache_loader_process_handler, "cache loader process", 60000
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
65 };
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
66
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
67
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
68 static ngx_cycle_t ngx_exit_cycle;
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
69 static ngx_log_t ngx_exit_log;
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
70 static ngx_open_file_t ngx_exit_log_file;
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
71
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
72
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
73 void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
74 ngx_master_process_cycle(ngx_cycle_t *cycle)
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
75 {
329
9a0ffa21f193 nginx-0.0.3-2004-04-29-00:21:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 327
diff changeset
76 char *title;
9a0ffa21f193 nginx-0.0.3-2004-04-29-00:21:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 327
diff changeset
77 u_char *p;
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
78 size_t size;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
79 ngx_int_t i;
7663
7cbf6389194b Fixed SIGQUIT not removing listening UNIX sockets (closes #753).
Ruslan Ermilov <ru@nginx.com>
parents: 7176
diff changeset
80 ngx_uint_t sigio;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
81 sigset_t set;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
82 struct itimerval itv;
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
83 ngx_uint_t live;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
84 ngx_msec_t delay;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
85 ngx_core_conf_t *ccf;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
86
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
87 sigemptyset(&set);
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
88 sigaddset(&set, SIGCHLD);
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
89 sigaddset(&set, SIGALRM);
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
90 sigaddset(&set, SIGIO);
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
91 sigaddset(&set, SIGINT);
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
92 sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL));
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
93 sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL));
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
94 sigaddset(&set, ngx_signal_value(NGX_NOACCEPT_SIGNAL));
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
95 sigaddset(&set, ngx_signal_value(NGX_TERMINATE_SIGNAL));
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
96 sigaddset(&set, ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
97 sigaddset(&set, ngx_signal_value(NGX_CHANGEBIN_SIGNAL));
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
98
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
99 if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) {
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
100 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
101 "sigprocmask() failed");
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
102 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
103
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
104 sigemptyset(&set);
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
105
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
106
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
107 size = sizeof(master_process);
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
108
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
109 for (i = 0; i < ngx_argc; i++) {
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
110 size += ngx_strlen(ngx_argv[i]) + 1;
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
111 }
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
112
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2031
diff changeset
113 title = ngx_pnalloc(cycle->pool, size);
5786
f8764e20fcd7 Core: exit on ngx_pnalloc() failure.
Piotr Sikora <piotr@cloudflare.com>
parents: 5702
diff changeset
114 if (title == NULL) {
f8764e20fcd7 Core: exit on ngx_pnalloc() failure.
Piotr Sikora <piotr@cloudflare.com>
parents: 5702
diff changeset
115 /* fatal */
f8764e20fcd7 Core: exit on ngx_pnalloc() failure.
Piotr Sikora <piotr@cloudflare.com>
parents: 5702
diff changeset
116 exit(2);
f8764e20fcd7 Core: exit on ngx_pnalloc() failure.
Piotr Sikora <piotr@cloudflare.com>
parents: 5702
diff changeset
117 }
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
118
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
119 p = ngx_cpymem(title, master_process, sizeof(master_process) - 1);
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
120 for (i = 0; i < ngx_argc; i++) {
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
121 *p++ = ' ';
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
122 p = ngx_cpystrn(p, (u_char *) ngx_argv[i], size);
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
123 }
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
124
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
125 ngx_setproctitle(title);
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
126
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
127
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
128 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
129
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
130 ngx_start_worker_processes(cycle, ccf->worker_processes,
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
131 NGX_PROCESS_RESPAWN);
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
132 ngx_start_cache_manager_processes(cycle, 0);
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
133
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
134 ngx_new_binary = 0;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
135 delay = 0;
3293
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
136 sigio = 0;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
137 live = 1;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
138
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
139 for ( ;; ) {
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
140 if (delay) {
3048
846d0e2fa483 twice termination delay only after SIGALRM, otherwise many separate SIGCHLD
Igor Sysoev <igor@sysoev.ru>
parents: 3047
diff changeset
141 if (ngx_sigalrm) {
3293
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
142 sigio = 0;
3048
846d0e2fa483 twice termination delay only after SIGALRM, otherwise many separate SIGCHLD
Igor Sysoev <igor@sysoev.ru>
parents: 3047
diff changeset
143 delay *= 2;
846d0e2fa483 twice termination delay only after SIGALRM, otherwise many separate SIGCHLD
Igor Sysoev <igor@sysoev.ru>
parents: 3047
diff changeset
144 ngx_sigalrm = 0;
846d0e2fa483 twice termination delay only after SIGALRM, otherwise many separate SIGCHLD
Igor Sysoev <igor@sysoev.ru>
parents: 3047
diff changeset
145 }
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
146
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
147 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6402
diff changeset
148 "termination cycle: %M", delay);
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
149
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
150 itv.it_interval.tv_sec = 0;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
151 itv.it_interval.tv_usec = 0;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
152 itv.it_value.tv_sec = delay / 1000;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
153 itv.it_value.tv_usec = (delay % 1000 ) * 1000;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
154
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
155 if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
156 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
157 "setitimer() failed");
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
158 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
159 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
160
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
161 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "sigsuspend");
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
162
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
163 sigsuspend(&set);
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
164
3475
ab353d7dc182 *) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents: 3474
diff changeset
165 ngx_time_update();
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
166
3304
6832c7f5e189 fix building without --with-debug, introduced in r3294
Igor Sysoev <igor@sysoev.ru>
parents: 3293
diff changeset
167 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
3293
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
168 "wake up, sigio %i", sigio);
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
169
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
170 if (ngx_reap) {
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
171 ngx_reap = 0;
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1437
diff changeset
172 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "reap children");
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
173
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1437
diff changeset
174 live = ngx_reap_children(cycle);
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
175 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
176
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
177 if (!live && (ngx_terminate || ngx_quit)) {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
178 ngx_master_process_exit(cycle);
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
179 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
180
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
181 if (ngx_terminate) {
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
182 if (delay == 0) {
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
183 delay = 50;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
184 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
185
3293
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
186 if (sigio) {
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
187 sigio--;
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
188 continue;
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
189 }
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
190
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
191 sigio = ccf->worker_processes + 2 /* cache processes */;
8abb88374c6c Fix a bug introduced in r2032: After a child process has read a terminate
Igor Sysoev <igor@sysoev.ru>
parents: 3230
diff changeset
192
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
193 if (delay > 1000) {
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
194 ngx_signal_worker_processes(cycle, SIGKILL);
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
195 } else {
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
196 ngx_signal_worker_processes(cycle,
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
197 ngx_signal_value(NGX_TERMINATE_SIGNAL));
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
198 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
199
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
200 continue;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
201 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
202
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
203 if (ngx_quit) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
204 ngx_signal_worker_processes(cycle,
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
205 ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
7663
7cbf6389194b Fixed SIGQUIT not removing listening UNIX sockets (closes #753).
Ruslan Ermilov <ru@nginx.com>
parents: 7176
diff changeset
206 ngx_close_listening_sockets(cycle);
531
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
207
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
208 continue;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
209 }
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
210
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
211 if (ngx_reconfigure) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
212 ngx_reconfigure = 0;
329
9a0ffa21f193 nginx-0.0.3-2004-04-29-00:21:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 327
diff changeset
213
9a0ffa21f193 nginx-0.0.3-2004-04-29-00:21:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 327
diff changeset
214 if (ngx_new_binary) {
9a0ffa21f193 nginx-0.0.3-2004-04-29-00:21:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 327
diff changeset
215 ngx_start_worker_processes(cycle, ccf->worker_processes,
449
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
216 NGX_PROCESS_RESPAWN);
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
217 ngx_start_cache_manager_processes(cycle, 0);
449
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
218 ngx_noaccepting = 0;
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
219
329
9a0ffa21f193 nginx-0.0.3-2004-04-29-00:21:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 327
diff changeset
220 continue;
9a0ffa21f193 nginx-0.0.3-2004-04-29-00:21:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 327
diff changeset
221 }
9a0ffa21f193 nginx-0.0.3-2004-04-29-00:21:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 327
diff changeset
222
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
223 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reconfiguring");
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
224
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
225 cycle = ngx_init_cycle(cycle);
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
226 if (cycle == NULL) {
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
227 cycle = (ngx_cycle_t *) ngx_cycle;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
228 continue;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
229 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
230
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
231 ngx_cycle = cycle;
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
232 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx,
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
233 ngx_core_module);
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
234 ngx_start_worker_processes(cycle, ccf->worker_processes,
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
235 NGX_PROCESS_JUST_RESPAWN);
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
236 ngx_start_cache_manager_processes(cycle, 1);
4500
9dfe02dd0f11 Added msleep() on reload to allow new processes to start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
237
9dfe02dd0f11 Added msleep() on reload to allow new processes to start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
238 /* allow new processes to start */
9dfe02dd0f11 Added msleep() on reload to allow new processes to start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
239 ngx_msleep(100);
9dfe02dd0f11 Added msleep() on reload to allow new processes to start.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
240
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
241 live = 1;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
242 ngx_signal_worker_processes(cycle,
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
243 ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
244 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
245
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
246 if (ngx_restart) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
247 ngx_restart = 0;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
248 ngx_start_worker_processes(cycle, ccf->worker_processes,
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
249 NGX_PROCESS_RESPAWN);
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
250 ngx_start_cache_manager_processes(cycle, 0);
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251 live = 1;
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
254 if (ngx_reopen) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
255 ngx_reopen = 0;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
256 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reopening logs");
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
257 ngx_reopen_files(cycle, ccf->user);
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
258 ngx_signal_worker_processes(cycle,
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
259 ngx_signal_value(NGX_REOPEN_SIGNAL));
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
260 }
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
262 if (ngx_change_binary) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
263 ngx_change_binary = 0;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
264 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "changing binary");
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
265 ngx_new_binary = ngx_exec_new_binary(cycle, ngx_argv);
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
266 }
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
267
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
268 if (ngx_noaccept) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
269 ngx_noaccept = 0;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
270 ngx_noaccepting = 1;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
271 ngx_signal_worker_processes(cycle,
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
272 ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
278 void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
279 ngx_single_process_cycle(ngx_cycle_t *cycle)
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
280 {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
281 ngx_uint_t i;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
282
3826
6843e7c492b7 allow "env" to work in the single process mode
Igor Sysoev <igor@sysoev.ru>
parents: 3762
diff changeset
283 if (ngx_set_environment(cycle, NULL) == NULL) {
6843e7c492b7 allow "env" to work in the single process mode
Igor Sysoev <igor@sysoev.ru>
parents: 3762
diff changeset
284 /* fatal */
6843e7c492b7 allow "env" to work in the single process mode
Igor Sysoev <igor@sysoev.ru>
parents: 3762
diff changeset
285 exit(2);
6843e7c492b7 allow "env" to work in the single process mode
Igor Sysoev <igor@sysoev.ru>
parents: 3762
diff changeset
286 }
6843e7c492b7 allow "env" to work in the single process mode
Igor Sysoev <igor@sysoev.ru>
parents: 3762
diff changeset
287
6379
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
288 for (i = 0; cycle->modules[i]; i++) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
289 if (cycle->modules[i]->init_process) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
290 if (cycle->modules[i]->init_process(cycle) == NGX_ERROR) {
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
291 /* fatal */
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
292 exit(2);
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
293 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
294 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
295 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
296
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
297 for ( ;; ) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
298 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
299
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
300 ngx_process_events_and_timers(cycle);
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
301
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
302 if (ngx_terminate || ngx_quit) {
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
303
6379
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
304 for (i = 0; cycle->modules[i]; i++) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
305 if (cycle->modules[i]->exit_process) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
306 cycle->modules[i]->exit_process(cycle);
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
307 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
308 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
309
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
310 ngx_master_process_exit(cycle);
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
311 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
312
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
313 if (ngx_reconfigure) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
314 ngx_reconfigure = 0;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
315 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reconfiguring");
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
316
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
317 cycle = ngx_init_cycle(cycle);
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
318 if (cycle == NULL) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
319 cycle = (ngx_cycle_t *) ngx_cycle;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
320 continue;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
321 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
322
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
323 ngx_cycle = cycle;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
324 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
325
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
326 if (ngx_reopen) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
327 ngx_reopen = 0;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
328 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reopening logs");
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
329 ngx_reopen_files(cycle, (ngx_uid_t) -1);
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
330 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
331 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
332 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
333
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
334
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
335 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
336 ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n, ngx_int_t type)
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
337 {
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
338 ngx_int_t i;
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
339 ngx_channel_t ch;
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
340
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
341 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes");
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
342
5245
711fa02afae8 Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5137
diff changeset
343 ngx_memzero(&ch, sizeof(ngx_channel_t));
711fa02afae8 Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5137
diff changeset
344
360
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
345 ch.command = NGX_CMD_OPEN_CHANNEL;
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
346
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
347 for (i = 0; i < n; i++) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
348
4912
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
349 ngx_spawn_process(cycle, ngx_worker_process_cycle,
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
350 (void *) (intptr_t) i, "worker process", type);
360
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
351
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
352 ch.pid = ngx_processes[ngx_process_slot].pid;
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
353 ch.slot = ngx_process_slot;
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
354 ch.fd = ngx_processes[ngx_process_slot].channel[0];
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
355
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
356 ngx_pass_open_channel(cycle, &ch);
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
357 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
358 }
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
359
360
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
360
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
361 static void
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
362 ngx_start_cache_manager_processes(ngx_cycle_t *cycle, ngx_uint_t respawn)
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
363 {
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
364 ngx_uint_t i, manager, loader;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
365 ngx_path_t **path;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
366 ngx_channel_t ch;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
367
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
368 manager = 0;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
369 loader = 0;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
370
4870
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4864
diff changeset
371 path = ngx_cycle->paths.elts;
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4864
diff changeset
372 for (i = 0; i < ngx_cycle->paths.nelts; i++) {
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
373
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
374 if (path[i]->manager) {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
375 manager = 1;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
376 }
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
377
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
378 if (path[i]->loader) {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
379 loader = 1;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
380 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
381 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
382
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
383 if (manager == 0) {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
384 return;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
385 }
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
386
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
387 ngx_spawn_process(cycle, ngx_cache_manager_process_cycle,
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
388 &ngx_cache_manager_ctx, "cache manager process",
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
389 respawn ? NGX_PROCESS_JUST_RESPAWN : NGX_PROCESS_RESPAWN);
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
390
5245
711fa02afae8 Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5137
diff changeset
391 ngx_memzero(&ch, sizeof(ngx_channel_t));
711fa02afae8 Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5137
diff changeset
392
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
393 ch.command = NGX_CMD_OPEN_CHANNEL;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
394 ch.pid = ngx_processes[ngx_process_slot].pid;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
395 ch.slot = ngx_process_slot;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
396 ch.fd = ngx_processes[ngx_process_slot].channel[0];
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
397
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
398 ngx_pass_open_channel(cycle, &ch);
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
399
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
400 if (loader == 0) {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
401 return;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
402 }
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
403
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
404 ngx_spawn_process(cycle, ngx_cache_manager_process_cycle,
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
405 &ngx_cache_loader_ctx, "cache loader process",
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
406 respawn ? NGX_PROCESS_JUST_SPAWN : NGX_PROCESS_NORESPAWN);
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
407
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
408 ch.command = NGX_CMD_OPEN_CHANNEL;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
409 ch.pid = ngx_processes[ngx_process_slot].pid;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
410 ch.slot = ngx_process_slot;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
411 ch.fd = ngx_processes[ngx_process_slot].channel[0];
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
412
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
413 ngx_pass_open_channel(cycle, &ch);
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
414 }
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
415
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
416
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
417 static void
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
418 ngx_pass_open_channel(ngx_cycle_t *cycle, ngx_channel_t *ch)
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
419 {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
420 ngx_int_t i;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
421
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
422 for (i = 0; i < ngx_last_process; i++) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
423
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
424 if (i == ngx_process_slot
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
425 || ngx_processes[i].pid == -1
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
426 || ngx_processes[i].channel[0] == -1)
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
427 {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
428 continue;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
429 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
430
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
431 ngx_log_debug6(NGX_LOG_DEBUG_CORE, cycle->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6402
diff changeset
432 "pass channel s:%i pid:%P fd:%d to s:%i pid:%P fd:%d",
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
433 ch->slot, ch->pid, ch->fd,
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
434 i, ngx_processes[i].pid,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
435 ngx_processes[i].channel[0]);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
436
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
437 /* TODO: NGX_AGAIN */
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
438
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
439 ngx_write_channel(ngx_processes[i].channel[0],
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
440 ch, sizeof(ngx_channel_t), cycle->log);
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
441 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
442 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
443
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
444
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
445 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
446 ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo)
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
447 {
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
448 ngx_int_t i;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
449 ngx_err_t err;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
450 ngx_channel_t ch;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
451
5245
711fa02afae8 Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5137
diff changeset
452 ngx_memzero(&ch, sizeof(ngx_channel_t));
711fa02afae8 Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5137
diff changeset
453
1581
81774dc3db28 Cygwin can not pass SCM_RIGHTS via unix socket, use signals
Igor Sysoev <igor@sysoev.ru>
parents: 1578
diff changeset
454 #if (NGX_BROKEN_SCM_RIGHTS)
81774dc3db28 Cygwin can not pass SCM_RIGHTS via unix socket, use signals
Igor Sysoev <igor@sysoev.ru>
parents: 1578
diff changeset
455
81774dc3db28 Cygwin can not pass SCM_RIGHTS via unix socket, use signals
Igor Sysoev <igor@sysoev.ru>
parents: 1578
diff changeset
456 ch.command = 0;
81774dc3db28 Cygwin can not pass SCM_RIGHTS via unix socket, use signals
Igor Sysoev <igor@sysoev.ru>
parents: 1578
diff changeset
457
81774dc3db28 Cygwin can not pass SCM_RIGHTS via unix socket, use signals
Igor Sysoev <igor@sysoev.ru>
parents: 1578
diff changeset
458 #else
81774dc3db28 Cygwin can not pass SCM_RIGHTS via unix socket, use signals
Igor Sysoev <igor@sysoev.ru>
parents: 1578
diff changeset
459
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
460 switch (signo) {
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
461
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
462 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
463 ch.command = NGX_CMD_QUIT;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
464 break;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
465
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
466 case ngx_signal_value(NGX_TERMINATE_SIGNAL):
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
467 ch.command = NGX_CMD_TERMINATE;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
468 break;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
469
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
470 case ngx_signal_value(NGX_REOPEN_SIGNAL):
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
471 ch.command = NGX_CMD_REOPEN;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
472 break;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
473
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
474 default:
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
475 ch.command = 0;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
476 }
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
477
1581
81774dc3db28 Cygwin can not pass SCM_RIGHTS via unix socket, use signals
Igor Sysoev <igor@sysoev.ru>
parents: 1578
diff changeset
478 #endif
81774dc3db28 Cygwin can not pass SCM_RIGHTS via unix socket, use signals
Igor Sysoev <igor@sysoev.ru>
parents: 1578
diff changeset
479
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
480 ch.fd = -1;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
481
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
482
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
483 for (i = 0; i < ngx_last_process; i++) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
484
449
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
485 ngx_log_debug7(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6402
diff changeset
486 "child: %i %P e:%d t:%d d:%d r:%d j:%d",
449
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
487 i,
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
488 ngx_processes[i].pid,
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
489 ngx_processes[i].exiting,
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
490 ngx_processes[i].exited,
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
491 ngx_processes[i].detached,
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
492 ngx_processes[i].respawn,
3016
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2616
diff changeset
493 ngx_processes[i].just_spawn);
449
3b1e8c9df9ad nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents: 448
diff changeset
494
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
495 if (ngx_processes[i].detached || ngx_processes[i].pid == -1) {
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
496 continue;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
497 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
498
3016
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2616
diff changeset
499 if (ngx_processes[i].just_spawn) {
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2616
diff changeset
500 ngx_processes[i].just_spawn = 0;
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
501 continue;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
502 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
503
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
504 if (ngx_processes[i].exiting
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
505 && signo == ngx_signal_value(NGX_SHUTDOWN_SIGNAL))
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
506 {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
507 continue;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
508 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
509
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
510 if (ch.command) {
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
511 if (ngx_write_channel(ngx_processes[i].channel[0],
1132
4576627269ab style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1069
diff changeset
512 &ch, sizeof(ngx_channel_t), cycle->log)
4576627269ab style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1069
diff changeset
513 == NGX_OK)
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
514 {
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
515 if (signo != ngx_signal_value(NGX_REOPEN_SIGNAL)) {
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
516 ngx_processes[i].exiting = 1;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
517 }
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
518
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
519 continue;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
520 }
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
521 }
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
522
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
523 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
5266
Maxim Dounin <mdounin@mdounin.ru>
parents: 5254
diff changeset
524 "kill (%P, %d)", ngx_processes[i].pid, signo);
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
525
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
526 if (kill(ngx_processes[i].pid, signo) == -1) {
322
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
527 err = ngx_errno;
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
528 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
3047
d02b6123b4dc style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
529 "kill(%P, %d) failed", ngx_processes[i].pid, signo);
322
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
530
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
531 if (err == NGX_ESRCH) {
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
532 ngx_processes[i].exited = 1;
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
533 ngx_processes[i].exiting = 0;
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
534 ngx_reap = 1;
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
535 }
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
536
318
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
537 continue;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
538 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
539
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
540 if (signo != ngx_signal_value(NGX_REOPEN_SIGNAL)) {
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
541 ngx_processes[i].exiting = 1;
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
542 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
543 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
544 }
56496082668b nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 317
diff changeset
545
317
1308b98496a2 nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
546
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
547 static ngx_uint_t
1565
4c43e25d11ea fix English grammar
Igor Sysoev <igor@sysoev.ru>
parents: 1437
diff changeset
548 ngx_reap_children(ngx_cycle_t *cycle)
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
549 {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
550 ngx_int_t i, n;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
551 ngx_uint_t live;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
552 ngx_channel_t ch;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
553 ngx_core_conf_t *ccf;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
554
5245
711fa02afae8 Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5137
diff changeset
555 ngx_memzero(&ch, sizeof(ngx_channel_t));
711fa02afae8 Valgrind: supressed complaints about uninitialized bytes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5137
diff changeset
556
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
557 ch.command = NGX_CMD_CLOSE_CHANNEL;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
558 ch.fd = -1;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
559
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
560 live = 0;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
561 for (i = 0; i < ngx_last_process; i++) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
562
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
563 ngx_log_debug7(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6402
diff changeset
564 "child: %i %P e:%d t:%d d:%d r:%d j:%d",
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
565 i,
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
566 ngx_processes[i].pid,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
567 ngx_processes[i].exiting,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
568 ngx_processes[i].exited,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
569 ngx_processes[i].detached,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
570 ngx_processes[i].respawn,
3016
d82993af1da0 introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents: 2616
diff changeset
571 ngx_processes[i].just_spawn);
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
572
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
573 if (ngx_processes[i].pid == -1) {
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
574 continue;
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
575 }
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
576
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
577 if (ngx_processes[i].exited) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
578
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
579 if (!ngx_processes[i].detached) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
580 ngx_close_channel(ngx_processes[i].channel, cycle->log);
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
581
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
582 ngx_processes[i].channel[0] = -1;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
583 ngx_processes[i].channel[1] = -1;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
584
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
585 ch.pid = ngx_processes[i].pid;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
586 ch.slot = i;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
587
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
588 for (n = 0; n < ngx_last_process; n++) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
589 if (ngx_processes[n].exited
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
590 || ngx_processes[n].pid == -1
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
591 || ngx_processes[n].channel[0] == -1)
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
592 {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
593 continue;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
594 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
595
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
596 ngx_log_debug3(NGX_LOG_DEBUG_CORE, cycle->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
597 "pass close channel s:%i pid:%P to:%P",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
598 ch.slot, ch.pid, ngx_processes[n].pid);
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
599
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
600 /* TODO: NGX_AGAIN */
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
601
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
602 ngx_write_channel(ngx_processes[n].channel[0],
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
603 &ch, sizeof(ngx_channel_t), cycle->log);
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
604 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
605 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
606
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
607 if (ngx_processes[i].respawn
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
608 && !ngx_processes[i].exiting
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
609 && !ngx_terminate
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
610 && !ngx_quit)
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
611 {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
612 if (ngx_spawn_process(cycle, ngx_processes[i].proc,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
613 ngx_processes[i].data,
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
614 ngx_processes[i].name, i)
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
615 == NGX_INVALID_PID)
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
616 {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
617 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
4133
59b99f217c6d Replaced "can not" with "cannot" and "could not" in a bunch of places.
Ruslan Ermilov <ru@nginx.com>
parents: 3826
diff changeset
618 "could not respawn %s",
59b99f217c6d Replaced "can not" with "cannot" and "could not" in a bunch of places.
Ruslan Ermilov <ru@nginx.com>
parents: 3826
diff changeset
619 ngx_processes[i].name);
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
620 continue;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
621 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
622
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
623
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
624 ch.command = NGX_CMD_OPEN_CHANNEL;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
625 ch.pid = ngx_processes[ngx_process_slot].pid;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
626 ch.slot = ngx_process_slot;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
627 ch.fd = ngx_processes[ngx_process_slot].channel[0];
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
628
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
629 ngx_pass_open_channel(cycle, &ch);
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
630
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
631 live = 1;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
632
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
633 continue;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
634 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
635
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
636 if (ngx_processes[i].pid == ngx_new_binary) {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
637
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
638 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx,
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
639 ngx_core_module);
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
640
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
641 if (ngx_rename_file((char *) ccf->oldpid.data,
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
642 (char *) ccf->pid.data)
5137
f941cf265cc5 Use NGX_FILE_ERROR for handling file operations errors.
Valentin Bartenev <vbart@nginx.com>
parents: 4917
diff changeset
643 == NGX_FILE_ERROR)
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
644 {
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
645 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
646 ngx_rename_file_n " %s back to %s failed "
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
647 "after the new binary process \"%s\" exited",
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
648 ccf->oldpid.data, ccf->pid.data, ngx_argv[0]);
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
649 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
650
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
651 ngx_new_binary = 0;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
652 if (ngx_noaccepting) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
653 ngx_restart = 1;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
654 ngx_noaccepting = 0;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
655 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
656 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
657
389
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
658 if (i == ngx_last_process - 1) {
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
659 ngx_last_process--;
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
660
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
661 } else {
537de4dca8ca nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 382
diff changeset
662 ngx_processes[i].pid = -1;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
663 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
664
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
665 } else if (ngx_processes[i].exiting || !ngx_processes[i].detached) {
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
666 live = 1;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
667 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
668 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
669
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
670 return live;
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
671 }
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
672
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
673
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
674 static void
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
675 ngx_master_process_exit(ngx_cycle_t *cycle)
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
676 {
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
677 ngx_uint_t i;
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
678
310
a9a9af2c7370 nginx-0.0.3-2004-04-12-10:10:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
679 ngx_delete_pidfile(cycle);
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
680
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
681 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exit");
310
a9a9af2c7370 nginx-0.0.3-2004-04-12-10:10:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 309
diff changeset
682
6379
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
683 for (i = 0; cycle->modules[i]; i++) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
684 if (cycle->modules[i]->exit_master) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
685 cycle->modules[i]->exit_master(cycle);
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
686 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
687 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
688
3230
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3048
diff changeset
689 ngx_close_listening_sockets(cycle);
a7491af45540 http listen unix domain sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3048
diff changeset
690
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
691 /*
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
692 * Copy ngx_cycle->log related data to the special static exit cycle,
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
693 * log, and log file structures enough to allow a signal handler to log.
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
694 * The handler may be called when standard ngx_cycle->log allocated from
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
695 * ngx_cycle->pool is already destroyed.
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
696 */
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
697
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
698
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5601
diff changeset
699 ngx_exit_log = *ngx_log_get_file_log(ngx_cycle->log);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5601
diff changeset
700
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5601
diff changeset
701 ngx_exit_log_file.fd = ngx_exit_log.file->fd;
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
702 ngx_exit_log.file = &ngx_exit_log_file;
5254
7ecaa9e4bf1b Core: support several "error_log" directives.
Vladimir Homutov <vl@nginx.com>
parents: 5245
diff changeset
703 ngx_exit_log.next = NULL;
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5601
diff changeset
704 ngx_exit_log.writer = NULL;
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
705
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
706 ngx_exit_cycle.log = &ngx_exit_log;
4691
626157fe6f17 Fixed segfault with poll and resolver used.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4549
diff changeset
707 ngx_exit_cycle.files = ngx_cycle->files;
626157fe6f17 Fixed segfault with poll and resolver used.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4549
diff changeset
708 ngx_exit_cycle.files_n = ngx_cycle->files_n;
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
709 ngx_cycle = &ngx_exit_cycle;
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
710
322
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
711 ngx_destroy_pool(cycle->pool);
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
712
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
713 exit(0);
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
714 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
715
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
716
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
717 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
718 ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
719 {
4912
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
720 ngx_int_t worker = (intptr_t) data;
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
721
3358
f94e8ff65aa2 add NGX_PROCESS_HELPER process status
Igor Sysoev <igor@sysoev.ru>
parents: 3304
diff changeset
722 ngx_process = NGX_PROCESS_WORKER;
6151
b4cc553aafeb Introduced worker number, ngx_worker.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6127
diff changeset
723 ngx_worker = worker;
3358
f94e8ff65aa2 add NGX_PROCESS_HELPER process status
Igor Sysoev <igor@sysoev.ru>
parents: 3304
diff changeset
724
4912
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
725 ngx_worker_process_init(cycle, worker);
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
726
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
727 ngx_setproctitle("worker process");
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
728
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
729 for ( ;; ) {
1135
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1134
diff changeset
730
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1134
diff changeset
731 if (ngx_exiting) {
6929
3069dd358ba2 Cancelable timers are now preserved if there are other timers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6727
diff changeset
732 if (ngx_event_no_timers_left() == NGX_OK) {
1135
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1134
diff changeset
733 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1134
diff changeset
734 ngx_worker_process_exit(cycle);
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1134
diff changeset
735 }
322
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
736 }
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
737
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
738 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
739
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
740 ngx_process_events_and_timers(cycle);
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
741
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
742 if (ngx_terminate) {
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
743 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
744 ngx_worker_process_exit(cycle);
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
745 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
746
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
747 if (ngx_quit) {
323
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 322
diff changeset
748 ngx_quit = 0;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
749 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0,
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
750 "gracefully shutting down");
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
751 ngx_setproctitle("worker process is shutting down");
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
752
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
753 if (!ngx_exiting) {
6220
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6151
diff changeset
754 ngx_exiting = 1;
6930
97c99bb43737 Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6929
diff changeset
755 ngx_set_shutdown_timer(cycle);
322
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
756 ngx_close_listening_sockets(cycle);
6220
5e6142609e48 Core: idle connections now closed only once on exiting.
Valentin Bartenev <vbart@nginx.com>
parents: 6151
diff changeset
757 ngx_close_idle_connections(cycle);
322
ab2f8c9a2a45 nginx-0.0.3-2004-04-20-11:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 318
diff changeset
758 }
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
759 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
760
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
761 if (ngx_reopen) {
323
ba876b26b76d nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 322
diff changeset
762 ngx_reopen = 0;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
763 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reopening logs");
278
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
764 ngx_reopen_files(cycle, -1);
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
765 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
766 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
767 }
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
768
0ba4821f4460 nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
769
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
770 static void
4912
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
771 ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
772 {
1069
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
773 sigset_t set;
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
774 ngx_int_t n;
6651
7d4e33092e2a Always seed PRNG with PID, seconds, and milliseconds.
Ruslan Ermilov <ru@nginx.com>
parents: 6650
diff changeset
775 ngx_time_t *tp;
1069
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
776 ngx_uint_t i;
6402
7296b38f6416 Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents: 6379
diff changeset
777 ngx_cpuset_t *cpu_affinity;
1069
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
778 struct rlimit rlmt;
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
779 ngx_core_conf_t *ccf;
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
780 ngx_listening_t *ls;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
781
1069
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
782 if (ngx_set_environment(cycle, NULL) == NULL) {
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
783 /* fatal */
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
784 exit(2);
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
785 }
Igor Sysoev <igor@sysoev.ru>
parents: 949
diff changeset
786
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
787 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
788
4912
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
789 if (worker >= 0 && ccf->priority != 0) {
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
790 if (setpriority(PRIO_PROCESS, 0, ccf->priority) == -1) {
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
791 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
792 "setpriority(%d) failed", ccf->priority);
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
793 }
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
794 }
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
795
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
796 if (ccf->rlimit_nofile != NGX_CONF_UNSET) {
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
797 rlmt.rlim_cur = (rlim_t) ccf->rlimit_nofile;
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
798 rlmt.rlim_max = (rlim_t) ccf->rlimit_nofile;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
799
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
800 if (setrlimit(RLIMIT_NOFILE, &rlmt) == -1) {
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
801 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
802 "setrlimit(RLIMIT_NOFILE, %i) failed",
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
803 ccf->rlimit_nofile);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
804 }
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
805 }
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
806
3762
89002ac695e5 worker_rlimit_core should be off_t
Igor Sysoev <igor@sysoev.ru>
parents: 3475
diff changeset
807 if (ccf->rlimit_core != NGX_CONF_UNSET) {
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
808 rlmt.rlim_cur = (rlim_t) ccf->rlimit_core;
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
809 rlmt.rlim_max = (rlim_t) ccf->rlimit_core;
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 587
diff changeset
810
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
811 if (setrlimit(RLIMIT_CORE, &rlmt) == -1) {
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
812 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
3762
89002ac695e5 worker_rlimit_core should be off_t
Igor Sysoev <igor@sysoev.ru>
parents: 3475
diff changeset
813 "setrlimit(RLIMIT_CORE, %O) failed",
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
814 ccf->rlimit_core);
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 587
diff changeset
815 }
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
816 }
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 587
diff changeset
817
1404
df2592d32e49 set worker_priority, worker_rlimit_nofile, worker_rlimit_core, and
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
818 if (geteuid() == 0) {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
819 if (setgid(ccf->group) == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
820 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
821 "setgid(%d) failed", ccf->group);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
822 /* fatal */
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
823 exit(2);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
824 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
825
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
826 if (initgroups(ccf->username, ccf->group) == -1) {
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
827 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
828 "initgroups(%s, %d) failed",
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
829 ccf->username, ccf->group);
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
830 }
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
831
7174
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
832 #if (NGX_HAVE_PR_SET_KEEPCAPS && NGX_HAVE_CAPABILITIES)
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
833 if (ccf->transparent && ccf->user) {
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
834 if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) == -1) {
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
835 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
836 "prctl(PR_SET_KEEPCAPS, 1) failed");
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
837 /* fatal */
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
838 exit(2);
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
839 }
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
840 }
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
841 #endif
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
842
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
843 if (setuid(ccf->user) == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
844 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
845 "setuid(%d) failed", ccf->user);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
846 /* fatal */
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
847 exit(2);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
848 }
7174
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
849
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
850 #if (NGX_HAVE_CAPABILITIES)
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
851 if (ccf->transparent && ccf->user) {
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
852 struct __user_cap_data_struct data;
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
853 struct __user_cap_header_struct header;
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
854
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
855 ngx_memzero(&header, sizeof(struct __user_cap_header_struct));
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
856 ngx_memzero(&data, sizeof(struct __user_cap_data_struct));
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
857
7176
7f28b61c92f0 Fixed capabilities version.
Roman Arutyunyan <arut@nginx.com>
parents: 7175
diff changeset
858 header.version = _LINUX_CAPABILITY_VERSION_1;
7174
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
859 data.effective = CAP_TO_MASK(CAP_NET_RAW);
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
860 data.permitted = data.effective;
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
861
7175
56923e8e01a5 Improved the capabilities feature detection.
Roman Arutyunyan <arut@nginx.com>
parents: 7174
diff changeset
862 if (syscall(SYS_capset, &header, &data) == -1) {
7174
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
863 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
864 "capset() failed");
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
865 /* fatal */
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
866 exit(2);
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
867 }
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
868 }
84e53e4735a4 Retain CAP_NET_RAW capability for transparent proxying.
Roman Arutyunyan <arut@nginx.com>
parents: 7162
diff changeset
869 #endif
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
870 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
871
4912
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
872 if (worker >= 0) {
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
873 cpu_affinity = ngx_get_cpu_affinity(worker);
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
874
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
875 if (cpu_affinity) {
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
876 ngx_setaffinity(cpu_affinity, cycle->log);
e8ef31c58d43 Fixed setting of CPU affinity on respawn of dead worker processes.
Ruslan Ermilov <ru@nginx.com>
parents: 4870
diff changeset
877 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
878 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
879
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
880 #if (NGX_HAVE_PR_SET_DUMPABLE)
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
881
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
882 /* allow coredump after setuid() in Linux 2.4.x */
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
883
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
884 if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
885 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
886 "prctl(PR_SET_DUMPABLE) failed");
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
887 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
888
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
889 #endif
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
890
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
891 if (ccf->working_directory.len) {
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
892 if (chdir((char *) ccf->working_directory.data) == -1) {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
893 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
894 "chdir(\"%s\") failed", ccf->working_directory.data);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
895 /* fatal */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
896 exit(2);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
897 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
898 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
899
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
900 sigemptyset(&set);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
901
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
902 if (sigprocmask(SIG_SETMASK, &set, NULL) == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
903 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
904 "sigprocmask() failed");
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
905 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
906
6651
7d4e33092e2a Always seed PRNG with PID, seconds, and milliseconds.
Ruslan Ermilov <ru@nginx.com>
parents: 6650
diff changeset
907 tp = ngx_timeofday();
7d4e33092e2a Always seed PRNG with PID, seconds, and milliseconds.
Ruslan Ermilov <ru@nginx.com>
parents: 6650
diff changeset
908 srandom(((unsigned) ngx_pid << 16) ^ tp->sec ^ tp->msec);
5499
b91bcba29351 Added per-process random seeding (ticket #456).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5266
diff changeset
909
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
910 /*
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
911 * disable deleting previous events for the listening sockets because
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
912 * in the worker processes there are no events at all at this point
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
913 */
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
914 ls = cycle->listening.elts;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
915 for (i = 0; i < cycle->listening.nelts; i++) {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
916 ls[i].previous = NULL;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
917 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
918
6379
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
919 for (i = 0; cycle->modules[i]; i++) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
920 if (cycle->modules[i]->init_process) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
921 if (cycle->modules[i]->init_process(cycle) == NGX_ERROR) {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
922 /* fatal */
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
923 exit(2);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
924 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
925 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
926 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
927
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
928 for (n = 0; n < ngx_last_process; n++) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
929
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
930 if (ngx_processes[n].pid == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
931 continue;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
932 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
933
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
934 if (n == ngx_process_slot) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
935 continue;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
936 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
937
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
938 if (ngx_processes[n].channel[1] == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
939 continue;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
940 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
941
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
942 if (close(ngx_processes[n].channel[1]) == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
943 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
944 "close() channel failed");
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
945 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
946 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
947
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
948 if (close(ngx_processes[ngx_process_slot].channel[0]) == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
949 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
950 "close() channel failed");
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
951 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
952
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
953 #if 0
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
954 ngx_last_process = 0;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
955 #endif
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
956
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
957 if (ngx_add_channel_event(cycle, ngx_channel, NGX_READ_EVENT,
1133
d5c1c84b7904 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1132
diff changeset
958 ngx_channel_handler)
d5c1c84b7904 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 1132
diff changeset
959 == NGX_ERROR)
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
960 {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
961 /* fatal */
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
962 exit(2);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
963 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
964 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
965
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
966
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
967 static void
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
968 ngx_worker_process_exit(ngx_cycle_t *cycle)
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
969 {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
970 ngx_uint_t i;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
971 ngx_connection_t *c;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
972
6379
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
973 for (i = 0; cycle->modules[i]; i++) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
974 if (cycle->modules[i]->exit_process) {
cf5e822cf470 Dynamic modules: changed ngx_modules to cycle->modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6220
diff changeset
975 cycle->modules[i]->exit_process(cycle);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
976 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
977 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
978
1905
0cafbfd8112e left open sockets were not really tested
Igor Sysoev <igor@sysoev.ru>
parents: 1900
diff changeset
979 if (ngx_exiting) {
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
980 c = cycle->connections;
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
981 for (i = 0; i < cycle->connection_n; i++) {
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
982 if (c[i].fd != -1
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
983 && c[i].read
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
984 && !c[i].read->accept
1905
0cafbfd8112e left open sockets were not really tested
Igor Sysoev <igor@sysoev.ru>
parents: 1900
diff changeset
985 && !c[i].read->channel
0cafbfd8112e left open sockets were not really tested
Igor Sysoev <igor@sysoev.ru>
parents: 1900
diff changeset
986 && !c[i].read->resolver)
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
987 {
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
988 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
5601
e45fa57ef725 Added connection serial number in logging of left open sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5499
diff changeset
989 "*%uA open socket #%d left in connection %ui",
e45fa57ef725 Added connection serial number in logging of left open sockets.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5499
diff changeset
990 c[i].number, c[i].fd, i);
3026
f4b5c787fe33 fix debug point for left open sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3019
diff changeset
991 ngx_debug_quit = 1;
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
992 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
993 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
994
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
995 if (ngx_debug_quit) {
3026
f4b5c787fe33 fix debug point for left open sockets
Igor Sysoev <igor@sysoev.ru>
parents: 3019
diff changeset
996 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "aborting");
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
997 ngx_debug_point();
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
998 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
999 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1000
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1001 /*
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1002 * Copy ngx_cycle->log related data to the special static exit cycle,
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1003 * log, and log file structures enough to allow a signal handler to log.
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1004 * The handler may be called when standard ngx_cycle->log allocated from
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1005 * ngx_cycle->pool is already destroyed.
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1006 */
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1007
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5601
diff changeset
1008 ngx_exit_log = *ngx_log_get_file_log(ngx_cycle->log);
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1009
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5601
diff changeset
1010 ngx_exit_log_file.fd = ngx_exit_log.file->fd;
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1011 ngx_exit_log.file = &ngx_exit_log_file;
5254
7ecaa9e4bf1b Core: support several "error_log" directives.
Vladimir Homutov <vl@nginx.com>
parents: 5245
diff changeset
1012 ngx_exit_log.next = NULL;
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5601
diff changeset
1013 ngx_exit_log.writer = NULL;
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1014
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1015 ngx_exit_cycle.log = &ngx_exit_log;
4691
626157fe6f17 Fixed segfault with poll and resolver used.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4549
diff changeset
1016 ngx_exit_cycle.files = ngx_cycle->files;
626157fe6f17 Fixed segfault with poll and resolver used.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4549
diff changeset
1017 ngx_exit_cycle.files_n = ngx_cycle->files_n;
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1018 ngx_cycle = &ngx_exit_cycle;
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1019
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1020 ngx_destroy_pool(cycle->pool);
1437
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1021
e498f4cb1663 destroy ngx_cycle->pool on exit
Igor Sysoev <igor@sysoev.ru>
parents: 1404
diff changeset
1022 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0, "exit");
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1023
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1024 exit(0);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1025 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1026
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1027
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1028 static void
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1029 ngx_channel_handler(ngx_event_t *ev)
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1030 {
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1031 ngx_int_t n;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1032 ngx_channel_t ch;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1033 ngx_connection_t *c;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1034
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1035 if (ev->timedout) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1036 ev->timedout = 0;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1037 return;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1038 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1039
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1040 c = ev->data;
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1041
357
e260514b9ad4 nginx-0.0.7-2004-06-16-23:36:07 import
Igor Sysoev <igor@sysoev.ru>
parents: 355
diff changeset
1042 ngx_log_debug0(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel handler");
e260514b9ad4 nginx-0.0.7-2004-06-16-23:36:07 import
Igor Sysoev <igor@sysoev.ru>
parents: 355
diff changeset
1043
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1044 for ( ;; ) {
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1045
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1046 n = ngx_read_channel(c->fd, &ch, sizeof(ngx_channel_t), ev->log);
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1047
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1048 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel: %i", n);
357
e260514b9ad4 nginx-0.0.7-2004-06-16-23:36:07 import
Igor Sysoev <igor@sysoev.ru>
parents: 355
diff changeset
1049
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1050 if (n == NGX_ERROR) {
1900
55a9d867e3c8 avoid endless loop if epoll is used
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
1051
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1052 if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1053 ngx_del_conn(c, 0);
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1054 }
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1055
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1056 ngx_close_connection(c);
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1057 return;
1900
55a9d867e3c8 avoid endless loop if epoll is used
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
1058 }
55a9d867e3c8 avoid endless loop if epoll is used
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
1059
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1060 if (ngx_event_flags & NGX_USE_EVENTPORT_EVENT) {
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1061 if (ngx_add_event(ev, NGX_READ_EVENT, 0) == NGX_ERROR) {
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1062 return;
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1063 }
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1064 }
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
1065
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1066 if (n == NGX_AGAIN) {
1134
384c92c210f9 worker processes did not exit after reconfiguration and
Igor Sysoev <igor@sysoev.ru>
parents: 1133
diff changeset
1067 return;
384c92c210f9 worker processes did not exit after reconfiguration and
Igor Sysoev <igor@sysoev.ru>
parents: 1133
diff changeset
1068 }
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1069
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1070 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6402
diff changeset
1071 "channel command: %ui", ch.command);
1134
384c92c210f9 worker processes did not exit after reconfiguration and
Igor Sysoev <igor@sysoev.ru>
parents: 1133
diff changeset
1072
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1073 switch (ch.command) {
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1074
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1075 case NGX_CMD_QUIT:
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1076 ngx_quit = 1;
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1077 break;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1078
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1079 case NGX_CMD_TERMINATE:
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1080 ngx_terminate = 1;
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1081 break;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1082
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1083 case NGX_CMD_REOPEN:
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1084 ngx_reopen = 1;
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1085 break;
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1086
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1087 case NGX_CMD_OPEN_CHANNEL:
360
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
1088
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1089 ngx_log_debug3(NGX_LOG_DEBUG_CORE, ev->log, 0,
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1090 "get channel s:%i pid:%P fd:%d",
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1091 ch.slot, ch.pid, ch.fd);
360
239e37d44a34 nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 357
diff changeset
1092
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1093 ngx_processes[ch.slot].pid = ch.pid;
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1094 ngx_processes[ch.slot].channel[0] = ch.fd;
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1095 break;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
1096
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1097 case NGX_CMD_CLOSE_CHANNEL:
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
1098
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1099 ngx_log_debug4(NGX_LOG_DEBUG_CORE, ev->log, 0,
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1100 "close channel s:%i pid:%P our:%P fd:%d",
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1101 ch.slot, ch.pid, ngx_processes[ch.slot].pid,
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1102 ngx_processes[ch.slot].channel[0]);
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
1103
2031
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1104 if (close(ngx_processes[ch.slot].channel[0]) == -1) {
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1105 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1106 "close() channel failed");
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1107 }
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1108
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1109 ngx_processes[ch.slot].channel[0] = -1;
c509e16b70f5 read channel until EAGAIN
Igor Sysoev <igor@sysoev.ru>
parents: 1905
diff changeset
1110 break;
365
fd24ba70e1b3 nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
1111 }
354
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1112 }
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1113 }
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1114
eaf1f651cf86 nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 345
diff changeset
1115
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1116 static void
2616
d19979e0d980 introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
1117 ngx_cache_manager_process_cycle(ngx_cycle_t *cycle, void *data)
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1118 {
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1119 ngx_cache_manager_ctx_t *ctx = data;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1120
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1121 void *ident[4];
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1122 ngx_event_t ev;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1123
4917
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4912
diff changeset
1124 /*
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4912
diff changeset
1125 * Set correct process type since closing listening Unix domain socket
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4912
diff changeset
1126 * in a master process also removes the Unix domain socket file.
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4912
diff changeset
1127 */
3358
f94e8ff65aa2 add NGX_PROCESS_HELPER process status
Igor Sysoev <igor@sysoev.ru>
parents: 3304
diff changeset
1128 ngx_process = NGX_PROCESS_HELPER;
f94e8ff65aa2 add NGX_PROCESS_HELPER process status
Igor Sysoev <igor@sysoev.ru>
parents: 3304
diff changeset
1129
4917
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4912
diff changeset
1130 ngx_close_listening_sockets(cycle);
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1131
4917
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4912
diff changeset
1132 /* Set a moderate number of connections for a helper process. */
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4912
diff changeset
1133 cycle->connection_n = 512;
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4912
diff changeset
1134
484aec758d2c Fixed failure to start cache manager and cache loader processes
Igor Sysoev <igor@sysoev.ru>
parents: 4912
diff changeset
1135 ngx_worker_process_init(cycle, -1);
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1136
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1137 ngx_memzero(&ev, sizeof(ngx_event_t));
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1138 ev.handler = ctx->handler;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1139 ev.data = ident;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1140 ev.log = cycle->log;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1141 ident[3] = (void *) -1;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1142
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1143 ngx_use_accept_mutex = 0;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1144
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1145 ngx_setproctitle(ctx->name);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1146
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1147 ngx_add_timer(&ev, ctx->delay);
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1148
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1149 for ( ;; ) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1150
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1151 if (ngx_terminate || ngx_quit) {
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
1152 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1153 exit(0);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1154 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1155
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1156 if (ngx_reopen) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1157 ngx_reopen = 0;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
1158 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reopening logs");
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1159 ngx_reopen_files(cycle, -1);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1160 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1161
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
1162 ngx_process_events_and_timers(cycle);
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1163 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1164 }
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1165
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1166
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1167 static void
2616
d19979e0d980 introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
1168 ngx_cache_manager_process_handler(ngx_event_t *ev)
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1169 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1170 ngx_uint_t i;
6727
ca709bca4b77 Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6651
diff changeset
1171 ngx_msec_t next, n;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1172 ngx_path_t **path;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1173
6727
ca709bca4b77 Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6651
diff changeset
1174 next = 60 * 60 * 1000;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1175
4870
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4864
diff changeset
1176 path = ngx_cycle->paths.elts;
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4864
diff changeset
1177 for (i = 0; i < ngx_cycle->paths.nelts; i++) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1178
2616
d19979e0d980 introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
1179 if (path[i]->manager) {
d19979e0d980 introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
1180 n = path[i]->manager(path[i]->data);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1181
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1182 next = (n <= next) ? n : next;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1183
3475
ab353d7dc182 *) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents: 3474
diff changeset
1184 ngx_time_update();
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1185 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1186 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1187
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1188 if (next == 0) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1189 next = 1;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1190 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1191
6727
ca709bca4b77 Cache: cache manager limits.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6651
diff changeset
1192 ngx_add_timer(ev, next);
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2522
diff changeset
1193 }
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1194
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1195
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1196 static void
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1197 ngx_cache_loader_process_handler(ngx_event_t *ev)
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1198 {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1199 ngx_uint_t i;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1200 ngx_path_t **path;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1201 ngx_cycle_t *cycle;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1202
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1203 cycle = (ngx_cycle_t *) ngx_cycle;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1204
4870
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4864
diff changeset
1205 path = cycle->paths.elts;
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4864
diff changeset
1206 for (i = 0; i < cycle->paths.nelts; i++) {
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1207
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1208 if (ngx_terminate || ngx_quit) {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1209 break;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1210 }
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1211
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1212 if (path[i]->loader) {
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1213 path[i]->loader(path[i]->data);
3475
ab353d7dc182 *) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents: 3474
diff changeset
1214 ngx_time_update();
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1215 }
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1216 }
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1217
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1218 exit(0);
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 3016
diff changeset
1219 }