annotate src/os/unix/ngx_process_cycle.c @ 391:1d9bef53cd8e

Range filter: late_ranges functionality. Add one more filtering point after postpone filter. This allows to serve range capable replies with subrequests. It's not as efficient as range filtering for static data (i.e. doesn't save us from reading data from disk if some filter needs them in memory), but it may save some network bandwidth for us and for our users.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 21 Jul 2008 05:33:01 +0400
parents 984bb0b1399b
children fc5ebf0e5f98
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10 #include <ngx_channel.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13 static void ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n,
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
14 ngx_int_t type);
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
15 static void ngx_start_garbage_collector(ngx_cycle_t *cycle, ngx_int_t type);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
16 static void ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo);
340
10cc350ed8a1 nginx 0.6.14
Igor Sysoev <http://sysoev.ru>
parents: 332
diff changeset
17 static ngx_uint_t ngx_reap_children(ngx_cycle_t *cycle);
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
18 static void ngx_master_process_exit(ngx_cycle_t *cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19 static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data);
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
20 static void ngx_worker_process_init(ngx_cycle_t *cycle, ngx_uint_t priority);
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
21 static void ngx_worker_process_exit(ngx_cycle_t *cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22 static void ngx_channel_handler(ngx_event_t *ev);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
23 #if (NGX_THREADS)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24 static void ngx_wakeup_worker_threads(ngx_cycle_t *cycle);
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
25 static ngx_thread_value_t ngx_worker_thread_cycle(void *data);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26 #endif
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
27 #if 0
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
28 static void ngx_garbage_collector_cycle(ngx_cycle_t *cycle, void *data);
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
29 #endif
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
30
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
31
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
32 ngx_uint_t ngx_process;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
33 ngx_pid_t ngx_pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34 ngx_uint_t ngx_threaded;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 sig_atomic_t ngx_reap;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 sig_atomic_t ngx_sigio;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38 sig_atomic_t ngx_terminate;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39 sig_atomic_t ngx_quit;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
40 sig_atomic_t ngx_debug_quit;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41 ngx_uint_t ngx_exiting;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42 sig_atomic_t ngx_reconfigure;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43 sig_atomic_t ngx_reopen;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
44
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45 sig_atomic_t ngx_change_binary;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 ngx_pid_t ngx_new_binary;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47 ngx_uint_t ngx_inherited;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48 ngx_uint_t ngx_daemonized;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
49
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
50 sig_atomic_t ngx_noaccept;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51 ngx_uint_t ngx_noaccepting;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
52 ngx_uint_t ngx_restart;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
53
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
54
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
55 #if (NGX_THREADS)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
56 volatile ngx_thread_t ngx_threads[NGX_MAX_THREADS];
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57 ngx_int_t ngx_threads_n;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
59
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
60
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
61 u_long cpu_affinity;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
62 static u_char master_process[] = "master process";
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
63
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
64
332
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
65 static ngx_cycle_t ngx_exit_cycle;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
66 static ngx_log_t ngx_exit_log;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
67 static ngx_open_file_t ngx_exit_log_file;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
68
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
69
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
70 void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
71 ngx_master_process_cycle(ngx_cycle_t *cycle)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
72 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
73 char *title;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
74 u_char *p;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
75 size_t size;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76 ngx_int_t i;
80
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
77 ngx_uint_t n;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
78 sigset_t set;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
79 struct itimerval itv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
80 ngx_uint_t live;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
81 ngx_msec_t delay;
80
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
82 ngx_listening_t *ls;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
83 ngx_core_conf_t *ccf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
84
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
85 sigemptyset(&set);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
86 sigaddset(&set, SIGCHLD);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
87 sigaddset(&set, SIGALRM);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
88 sigaddset(&set, SIGIO);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
89 sigaddset(&set, SIGINT);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
90 sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
91 sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
92 sigaddset(&set, ngx_signal_value(NGX_NOACCEPT_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
93 sigaddset(&set, ngx_signal_value(NGX_TERMINATE_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
94 sigaddset(&set, ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
95 sigaddset(&set, ngx_signal_value(NGX_CHANGEBIN_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
96
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
97 if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
98 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
99 "sigprocmask() failed");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
100 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
101
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
102 sigemptyset(&set);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
103
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
104
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
105 size = sizeof(master_process);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
106
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
107 for (i = 0; i < ngx_argc; i++) {
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
108 size += ngx_strlen(ngx_argv[i]) + 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
109 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
110
382
984bb0b1399b nginx 0.7.3
Igor Sysoev <http://sysoev.ru>
parents: 378
diff changeset
111 title = ngx_pnalloc(cycle->pool, size);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
112
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
113 p = ngx_cpymem(title, master_process, sizeof(master_process) - 1);
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
114 for (i = 0; i < ngx_argc; i++) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
115 *p++ = ' ';
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
116 p = ngx_cpystrn(p, (u_char *) ngx_argv[i], size);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
117 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
118
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
119 ngx_setproctitle(title);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
120
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
121
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
122 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
123
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
124 ngx_start_worker_processes(cycle, ccf->worker_processes,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
125 NGX_PROCESS_RESPAWN);
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
126 ngx_start_garbage_collector(cycle, NGX_PROCESS_RESPAWN);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
127
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
128 ngx_new_binary = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
129 delay = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
130 live = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
131
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
132 for ( ;; ) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
133 if (delay) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
134 delay *= 2;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
135
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
136 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
137 "temination cycle: %d", delay);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
138
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
139 itv.it_interval.tv_sec = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
140 itv.it_interval.tv_usec = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
141 itv.it_value.tv_sec = delay / 1000;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
142 itv.it_value.tv_usec = (delay % 1000 ) * 1000;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
143
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
144 if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
145 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
146 "setitimer() failed");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
147 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
148 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
149
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
150 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "sigsuspend");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
151
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
152 sigsuspend(&set);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
153
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
154 ngx_time_update(0, 0);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
155
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
156 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "wake up");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
157
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
158 if (ngx_reap) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
159 ngx_reap = 0;
340
10cc350ed8a1 nginx 0.6.14
Igor Sysoev <http://sysoev.ru>
parents: 332
diff changeset
160 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "reap children");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
161
340
10cc350ed8a1 nginx 0.6.14
Igor Sysoev <http://sysoev.ru>
parents: 332
diff changeset
162 live = ngx_reap_children(cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
163 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
164
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
165 if (!live && (ngx_terminate || ngx_quit)) {
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
166 ngx_master_process_exit(cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
167 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
168
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
169 if (ngx_terminate) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
170 if (delay == 0) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
171 delay = 50;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
172 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
173
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
174 if (delay > 1000) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
175 ngx_signal_worker_processes(cycle, SIGKILL);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
176 } else {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
177 ngx_signal_worker_processes(cycle,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
178 ngx_signal_value(NGX_TERMINATE_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
179 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
180
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
181 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
182 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
183
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
184 if (ngx_quit) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
185 ngx_signal_worker_processes(cycle,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
186 ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
80
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
187
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
188 ls = cycle->listening.elts;
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
189 for (n = 0; n < cycle->listening.nelts; n++) {
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
190 if (ngx_close_socket(ls[n].fd) == -1) {
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
191 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno,
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
192 ngx_close_socket_n " %V failed",
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
193 &ls[n].addr_text);
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
194 }
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
195 }
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
196 cycle->listening.nelts = 0;
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
197
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
198 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
199 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
200
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
201 if (ngx_reconfigure) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
202 ngx_reconfigure = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
203
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
204 if (ngx_new_binary) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
205 ngx_start_worker_processes(cycle, ccf->worker_processes,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
206 NGX_PROCESS_RESPAWN);
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
207 ngx_start_garbage_collector(cycle, NGX_PROCESS_RESPAWN);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
208 ngx_noaccepting = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
209
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
210 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
211 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
212
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
213 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reconfiguring");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
214
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
215 cycle = ngx_init_cycle(cycle);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
216 if (cycle == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
217 cycle = (ngx_cycle_t *) ngx_cycle;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
218 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
219 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
220
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
221 ngx_cycle = cycle;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
222 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
223 ngx_core_module);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
224 ngx_start_worker_processes(cycle, ccf->worker_processes,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
225 NGX_PROCESS_JUST_RESPAWN);
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
226 ngx_start_garbage_collector(cycle, NGX_PROCESS_JUST_RESPAWN);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
227 live = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
228 ngx_signal_worker_processes(cycle,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
229 ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
230 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
231
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
232 if (ngx_restart) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
233 ngx_restart = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
234 ngx_start_worker_processes(cycle, ccf->worker_processes,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
235 NGX_PROCESS_RESPAWN);
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
236 ngx_start_garbage_collector(cycle, NGX_PROCESS_RESPAWN);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
237 live = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
238 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
239
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
240 if (ngx_reopen) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
241 ngx_reopen = 0;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
242 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reopening logs");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
243 ngx_reopen_files(cycle, ccf->user);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
244 ngx_signal_worker_processes(cycle,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
245 ngx_signal_value(NGX_REOPEN_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
246 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
247
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
248 if (ngx_change_binary) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
249 ngx_change_binary = 0;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
250 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "changing binary");
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
251 ngx_new_binary = ngx_exec_new_binary(cycle, ngx_argv);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
252 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
253
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
254 if (ngx_noaccept) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
255 ngx_noaccept = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
256 ngx_noaccepting = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
257 ngx_signal_worker_processes(cycle,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
258 ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
259 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
260 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
261 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
262
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
263
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
264 void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
265 ngx_single_process_cycle(ngx_cycle_t *cycle)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
266 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
267 ngx_uint_t i;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
268
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
269 ngx_init_temp_number();
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
270
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
271 for (i = 0; ngx_modules[i]; i++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
272 if (ngx_modules[i]->init_process) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
273 if (ngx_modules[i]->init_process(cycle) == NGX_ERROR) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
274 /* fatal */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
275 exit(2);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
276 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
277 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
278 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
279
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
280 for ( ;; ) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
281 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
282
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
283 ngx_process_events_and_timers(cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
284
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
285 if (ngx_terminate || ngx_quit) {
120
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
286
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
287 for (i = 0; ngx_modules[i]; i++) {
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
288 if (ngx_modules[i]->exit_process) {
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
289 ngx_modules[i]->exit_process(cycle);
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
290 }
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
291 }
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
292
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
293 ngx_master_process_exit(cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
294 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
295
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
296 if (ngx_reconfigure) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
297 ngx_reconfigure = 0;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
298 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reconfiguring");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
299
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
300 cycle = ngx_init_cycle(cycle);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
301 if (cycle == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
302 cycle = (ngx_cycle_t *) ngx_cycle;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
303 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
304 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
305
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
306 ngx_cycle = cycle;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
307 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
308
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
309 if (ngx_reopen) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
310 ngx_reopen = 0;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
311 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reopening logs");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
312 ngx_reopen_files(cycle, (ngx_uid_t) -1);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
313 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
314 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
315 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
316
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
317
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
318 static void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
319 ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n, ngx_int_t type)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
320 {
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
321 ngx_int_t i, s;
106
45f7329b4bd0 nginx 0.3.0
Igor Sysoev <http://sysoev.ru>
parents: 92
diff changeset
322 ngx_channel_t ch;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
323
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
324 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
325
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
326 ch.command = NGX_CMD_OPEN_CHANNEL;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
327
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
328 for (i = 0; i < n; i++) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
329
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
330 cpu_affinity = ngx_get_cpu_affinity(i);
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
331
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
332 ngx_spawn_process(cycle, ngx_worker_process_cycle, NULL,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
333 "worker process", type);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
334
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
335 ch.pid = ngx_processes[ngx_process_slot].pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
336 ch.slot = ngx_process_slot;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
337 ch.fd = ngx_processes[ngx_process_slot].channel[0];
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
338
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
339 for (s = 0; s < ngx_last_process; s++) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
340
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
341 if (s == ngx_process_slot
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
342 || ngx_processes[s].pid == -1
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
343 || ngx_processes[s].channel[0] == -1)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
344 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
345 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
346 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
347
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
348 ngx_log_debug6(NGX_LOG_DEBUG_CORE, cycle->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
349 "pass channel s:%d pid:%P fd:%d to s:%i pid:%P fd:%d",
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
350 ch.slot, ch.pid, ch.fd,
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
351 s, ngx_processes[s].pid,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
352 ngx_processes[s].channel[0]);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
353
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
354 /* TODO: NGX_AGAIN */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
355
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
356 ngx_write_channel(ngx_processes[s].channel[0],
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
357 &ch, sizeof(ngx_channel_t), cycle->log);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
358 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
359 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
360 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
361
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
362
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
363 static void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
364 ngx_start_garbage_collector(ngx_cycle_t *cycle, ngx_int_t type)
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
365 {
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
366 #if 0
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
367 ngx_int_t i;
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
368 ngx_channel_t ch;
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
369
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
370 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start garbage collector");
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
371
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
372 ch.command = NGX_CMD_OPEN_CHANNEL;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
373
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
374 ngx_spawn_process(cycle, ngx_garbage_collector_cycle, NULL,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
375 "garbage collector", type);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
376
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
377 ch.pid = ngx_processes[ngx_process_slot].pid;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
378 ch.slot = ngx_process_slot;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
379 ch.fd = ngx_processes[ngx_process_slot].channel[0];
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
380
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
381 for (i = 0; i < ngx_last_process; i++) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
382
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
383 if (i == ngx_process_slot
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
384 || ngx_processes[i].pid == -1
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
385 || ngx_processes[i].channel[0] == -1)
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
386 {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
387 continue;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
388 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
389
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
390 ngx_log_debug6(NGX_LOG_DEBUG_CORE, cycle->log, 0,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
391 "pass channel s:%d pid:%P fd:%d to s:%i pid:%P fd:%d",
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
392 ch.slot, ch.pid, ch.fd,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
393 i, ngx_processes[i].pid,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
394 ngx_processes[i].channel[0]);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
395
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
396 /* TODO: NGX_AGAIN */
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
397
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
398 ngx_write_channel(ngx_processes[i].channel[0],
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
399 &ch, sizeof(ngx_channel_t), cycle->log);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
400 }
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
401 #endif
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
402 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
403
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
404
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
405 static void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
406 ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
407 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
408 ngx_int_t i;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
409 ngx_err_t err;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
410 ngx_channel_t ch;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
411
342
4276c2f1f434 nginx 0.6.15
Igor Sysoev <http://sysoev.ru>
parents: 340
diff changeset
412 #if (NGX_BROKEN_SCM_RIGHTS)
4276c2f1f434 nginx 0.6.15
Igor Sysoev <http://sysoev.ru>
parents: 340
diff changeset
413
4276c2f1f434 nginx 0.6.15
Igor Sysoev <http://sysoev.ru>
parents: 340
diff changeset
414 ch.command = 0;
4276c2f1f434 nginx 0.6.15
Igor Sysoev <http://sysoev.ru>
parents: 340
diff changeset
415
4276c2f1f434 nginx 0.6.15
Igor Sysoev <http://sysoev.ru>
parents: 340
diff changeset
416 #else
4276c2f1f434 nginx 0.6.15
Igor Sysoev <http://sysoev.ru>
parents: 340
diff changeset
417
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
418 switch (signo) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
419
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
420 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
421 ch.command = NGX_CMD_QUIT;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
422 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
423
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
424 case ngx_signal_value(NGX_TERMINATE_SIGNAL):
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
425 ch.command = NGX_CMD_TERMINATE;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
426 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
427
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
428 case ngx_signal_value(NGX_REOPEN_SIGNAL):
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
429 ch.command = NGX_CMD_REOPEN;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
430 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
431
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
432 default:
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
433 ch.command = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
434 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
435
342
4276c2f1f434 nginx 0.6.15
Igor Sysoev <http://sysoev.ru>
parents: 340
diff changeset
436 #endif
4276c2f1f434 nginx 0.6.15
Igor Sysoev <http://sysoev.ru>
parents: 340
diff changeset
437
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
438 ch.fd = -1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
439
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
440
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
441 for (i = 0; i < ngx_last_process; i++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
442
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
443 ngx_log_debug7(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
444 "child: %d %P e:%d t:%d d:%d r:%d j:%d",
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
445 i,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
446 ngx_processes[i].pid,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
447 ngx_processes[i].exiting,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
448 ngx_processes[i].exited,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
449 ngx_processes[i].detached,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
450 ngx_processes[i].respawn,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
451 ngx_processes[i].just_respawn);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
452
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
453 if (ngx_processes[i].detached || ngx_processes[i].pid == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
454 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
455 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
456
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
457 if (ngx_processes[i].just_respawn) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
458 ngx_processes[i].just_respawn = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
459 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
460 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
461
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
462 if (ngx_processes[i].exiting
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
463 && signo == ngx_signal_value(NGX_SHUTDOWN_SIGNAL))
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
464 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
465 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
466 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
467
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
468 if (ch.command) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
469 if (ngx_write_channel(ngx_processes[i].channel[0],
290
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
470 &ch, sizeof(ngx_channel_t), cycle->log)
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
471 == NGX_OK)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
472 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
473 if (signo != ngx_signal_value(NGX_REOPEN_SIGNAL)) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
474 ngx_processes[i].exiting = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
475 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
476
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
477 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
478 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
479 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
480
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
481 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
482 "kill (%P, %d)" , ngx_processes[i].pid, signo);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
483
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
484 if (kill(ngx_processes[i].pid, signo) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
485 err = ngx_errno;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
486 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
487 "kill(%P, %d) failed",
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
488 ngx_processes[i].pid, signo);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
489
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
490 if (err == NGX_ESRCH) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
491 ngx_processes[i].exited = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
492 ngx_processes[i].exiting = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
493 ngx_reap = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
494 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
495
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
496 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
497 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
498
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
499 if (signo != ngx_signal_value(NGX_REOPEN_SIGNAL)) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
500 ngx_processes[i].exiting = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
501 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
502 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
503 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
504
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
505
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
506 static ngx_uint_t
340
10cc350ed8a1 nginx 0.6.14
Igor Sysoev <http://sysoev.ru>
parents: 332
diff changeset
507 ngx_reap_children(ngx_cycle_t *cycle)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
508 {
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
509 ngx_int_t i, n;
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
510 ngx_uint_t live;
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
511 ngx_channel_t ch;
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
512 ngx_core_conf_t *ccf;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
513
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
514 ch.command = NGX_CMD_CLOSE_CHANNEL;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
515 ch.fd = -1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
516
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
517 live = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
518 for (i = 0; i < ngx_last_process; i++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
519
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
520 ngx_log_debug7(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
521 "child: %d %P e:%d t:%d d:%d r:%d j:%d",
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
522 i,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
523 ngx_processes[i].pid,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
524 ngx_processes[i].exiting,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
525 ngx_processes[i].exited,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
526 ngx_processes[i].detached,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
527 ngx_processes[i].respawn,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
528 ngx_processes[i].just_respawn);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
529
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
530 if (ngx_processes[i].pid == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
531 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
532 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
533
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
534 if (ngx_processes[i].exited) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
535
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
536 if (!ngx_processes[i].detached) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
537 ngx_close_channel(ngx_processes[i].channel, cycle->log);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
538
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
539 ngx_processes[i].channel[0] = -1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
540 ngx_processes[i].channel[1] = -1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
541
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
542 ch.pid = ngx_processes[i].pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
543 ch.slot = i;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
544
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
545 for (n = 0; n < ngx_last_process; n++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
546 if (ngx_processes[n].exited
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
547 || ngx_processes[n].pid == -1
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
548 || ngx_processes[n].channel[0] == -1)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
549 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
550 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
551 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
552
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
553 ngx_log_debug3(NGX_LOG_DEBUG_CORE, cycle->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
554 "pass close channel s:%i pid:%P to:%P",
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
555 ch.slot, ch.pid, ngx_processes[n].pid);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
556
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
557 /* TODO: NGX_AGAIN */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
558
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
559 ngx_write_channel(ngx_processes[n].channel[0],
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
560 &ch, sizeof(ngx_channel_t), cycle->log);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
561 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
562 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
563
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
564 if (ngx_processes[i].respawn
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
565 && !ngx_processes[i].exiting
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
566 && !ngx_terminate
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
567 && !ngx_quit)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
568 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
569 if (ngx_spawn_process(cycle, ngx_processes[i].proc,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
570 ngx_processes[i].data,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
571 ngx_processes[i].name, i)
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
572 == NGX_INVALID_PID)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
573 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
574 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
575 "can not respawn %s", ngx_processes[i].name);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
576 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
577 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
578
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
579
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
580 ch.command = NGX_CMD_OPEN_CHANNEL;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
581 ch.pid = ngx_processes[ngx_process_slot].pid;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
582 ch.slot = ngx_process_slot;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
583 ch.fd = ngx_processes[ngx_process_slot].channel[0];
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
584
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
585 for (n = 0; n < ngx_last_process; n++) {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
586
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
587 if (n == ngx_process_slot
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
588 || ngx_processes[n].pid == -1
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
589 || ngx_processes[n].channel[0] == -1)
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
590 {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
591 continue;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
592 }
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
593
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
594 ngx_log_debug6(NGX_LOG_DEBUG_CORE, cycle->log, 0,
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
595 "pass channel s:%d pid:%P fd:%d to s:%i pid:%P fd:%d",
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
596 ch.slot, ch.pid, ch.fd,
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
597 n, ngx_processes[n].pid,
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
598 ngx_processes[n].channel[0]);
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
599
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
600 /* TODO: NGX_AGAIN */
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
601
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
602 ngx_write_channel(ngx_processes[n].channel[0],
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
603 &ch, sizeof(ngx_channel_t), cycle->log);
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
604 }
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
605
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
606 live = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
607
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
608 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
609 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
610
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
611 if (ngx_processes[i].pid == ngx_new_binary) {
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
612
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
613 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
614 ngx_core_module);
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
615
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
616 if (ngx_rename_file((char *) ccf->oldpid.data,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
617 (char *) ccf->pid.data)
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
618 != NGX_OK)
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
619 {
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
620 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
621 ngx_rename_file_n " %s back to %s failed "
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
622 "after the new binary process \"%s\" exited",
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
623 ccf->oldpid.data, ccf->pid.data, ngx_argv[0]);
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
624 }
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
625
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
626 ngx_new_binary = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
627 if (ngx_noaccepting) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
628 ngx_restart = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
629 ngx_noaccepting = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
630 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
631 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
632
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
633 if (i == ngx_last_process - 1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
634 ngx_last_process--;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
635
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
636 } else {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
637 ngx_processes[i].pid = -1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
638 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
639
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
640 } else if (ngx_processes[i].exiting || !ngx_processes[i].detached) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
641 live = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
642 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
643 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
644
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
645 return live;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
646 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
647
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
648
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
649 static void
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
650 ngx_master_process_exit(ngx_cycle_t *cycle)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
651 {
120
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
652 ngx_uint_t i;
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
653
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
654 ngx_delete_pidfile(cycle);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
655
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
656 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exit");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
657
120
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
658 for (i = 0; ngx_modules[i]; i++) {
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
659 if (ngx_modules[i]->exit_master) {
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
660 ngx_modules[i]->exit_master(cycle);
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
661 }
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
662 }
e85dca77c46a nginx 0.3.7
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
663
54
bcb5fce0b038 nginx 0.1.27
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
664 /*
332
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
665 * Copy ngx_cycle->log related data to the special static exit cycle,
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
666 * log, and log file structures enough to allow a signal handler to log.
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
667 * The handler may be called when standard ngx_cycle->log allocated from
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
668 * ngx_cycle->pool is already destroyed.
54
bcb5fce0b038 nginx 0.1.27
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
669 */
bcb5fce0b038 nginx 0.1.27
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
670
332
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
671 ngx_exit_log_file.fd = ngx_cycle->log->file->fd;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
672
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
673 ngx_exit_log = *ngx_cycle->log;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
674 ngx_exit_log.file = &ngx_exit_log_file;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
675
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
676 ngx_exit_cycle.log = &ngx_exit_log;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
677 ngx_cycle = &ngx_exit_cycle;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
678
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
679 ngx_destroy_pool(cycle->pool);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
680
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
681 exit(0);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
682 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
683
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
684
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
685 static void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
686 ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
687 {
290
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
688 ngx_uint_t i;
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
689 ngx_connection_t *c;
18
6f8b0dc0f8dd nginx 0.1.9
Igor Sysoev <http://sysoev.ru>
parents: 16
diff changeset
690
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
691 ngx_worker_process_init(cycle, 1);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
692
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
693 ngx_setproctitle("worker process");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
694
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
695 #if (NGX_THREADS)
356
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 342
diff changeset
696 {
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 342
diff changeset
697 ngx_int_t n;
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 342
diff changeset
698 ngx_err_t err;
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 342
diff changeset
699 ngx_core_conf_t *ccf;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
700
18
6f8b0dc0f8dd nginx 0.1.9
Igor Sysoev <http://sysoev.ru>
parents: 16
diff changeset
701 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
6f8b0dc0f8dd nginx 0.1.9
Igor Sysoev <http://sysoev.ru>
parents: 16
diff changeset
702
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
703 if (ngx_threads_n) {
290
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
704 if (ngx_init_threads(ngx_threads_n, ccf->thread_stack_size, cycle)
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
705 == NGX_ERROR)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
706 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
707 /* fatal */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
708 exit(2);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
709 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
710
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
711 err = ngx_thread_key_create(&ngx_core_tls_key);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
712 if (err != 0) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
713 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
714 ngx_thread_key_create_n " failed");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
715 /* fatal */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
716 exit(2);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
717 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
718
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
719 for (n = 0; n < ngx_threads_n; n++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
720
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
721 ngx_threads[n].cv = ngx_cond_init(cycle->log);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
722
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
723 if (ngx_threads[n].cv == NULL) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
724 /* fatal */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
725 exit(2);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
726 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
727
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
728 if (ngx_create_thread((ngx_tid_t *) &ngx_threads[n].tid,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
729 ngx_worker_thread_cycle,
290
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
730 (void *) &ngx_threads[n], cycle->log)
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
731 != 0)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
732 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
733 /* fatal */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
734 exit(2);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
735 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
736 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
737 }
356
b743d290eb3b nginx 0.6.22
Igor Sysoev <http://sysoev.ru>
parents: 342
diff changeset
738 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
739 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
740
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
741 for ( ;; ) {
290
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
742
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
743 if (ngx_exiting) {
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
744
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
745 c = cycle->connections;
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
746
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
747 for (i = 0; i < cycle->connection_n; i++) {
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
748
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
749 /* THREAD: lock */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
750
290
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
751 if (c[i].fd != -1 && c[i].idle) {
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
752 c[i].close = 1;
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
753 c[i].read->handler(c[i].read);
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
754 }
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
755 }
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
756
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
757 if (ngx_event_timer_rbtree.root == ngx_event_timer_rbtree.sentinel)
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
758 {
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
759 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
760
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
761 ngx_worker_process_exit(cycle);
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
762 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
763 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
764
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
765 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
766
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
767 ngx_process_events_and_timers(cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
768
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
769 if (ngx_terminate) {
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
770 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
771
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
772 ngx_worker_process_exit(cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
773 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
774
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
775 if (ngx_quit) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
776 ngx_quit = 0;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
777 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0,
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
778 "gracefully shutting down");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
779 ngx_setproctitle("worker process is shutting down");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
780
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
781 if (!ngx_exiting) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
782 ngx_close_listening_sockets(cycle);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
783 ngx_exiting = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
784 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
785 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
786
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
787 if (ngx_reopen) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
788 ngx_reopen = 0;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
789 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reopening logs");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
790 ngx_reopen_files(cycle, -1);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
791 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
792 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
793 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
794
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
795
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
796 static void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
797 ngx_worker_process_init(ngx_cycle_t *cycle, ngx_uint_t priority)
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
798 {
278
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
799 sigset_t set;
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
800 ngx_int_t n;
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
801 ngx_uint_t i;
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
802 struct rlimit rlmt;
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
803 ngx_core_conf_t *ccf;
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
804 ngx_listening_t *ls;
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
805
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
806 ngx_process = NGX_PROCESS_WORKER;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
807
278
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
808 if (ngx_set_environment(cycle, NULL) == NULL) {
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
809 /* fatal */
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
810 exit(2);
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
811 }
704622b2528a nginx 0.5.9
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
812
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
813 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
814
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
815 if (priority && ccf->priority != 0) {
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
816 if (setpriority(PRIO_PROCESS, 0, ccf->priority) == -1) {
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
817 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
818 "setpriority(%d) failed", ccf->priority);
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
819 }
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
820 }
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
821
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
822 if (ccf->rlimit_nofile != NGX_CONF_UNSET) {
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
823 rlmt.rlim_cur = (rlim_t) ccf->rlimit_nofile;
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
824 rlmt.rlim_max = (rlim_t) ccf->rlimit_nofile;
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
825
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
826 if (setrlimit(RLIMIT_NOFILE, &rlmt) == -1) {
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
827 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
828 "setrlimit(RLIMIT_NOFILE, %i) failed",
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
829 ccf->rlimit_nofile);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
830 }
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
831 }
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
832
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
833 if (ccf->rlimit_core != NGX_CONF_UNSET_SIZE) {
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
834 rlmt.rlim_cur = (rlim_t) ccf->rlimit_core;
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
835 rlmt.rlim_max = (rlim_t) ccf->rlimit_core;
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 136
diff changeset
836
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
837 if (setrlimit(RLIMIT_CORE, &rlmt) == -1) {
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
838 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
839 "setrlimit(RLIMIT_CORE, %i) failed",
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
840 ccf->rlimit_core);
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 136
diff changeset
841 }
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
842 }
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 136
diff changeset
843
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
844 #ifdef RLIMIT_SIGPENDING
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
845 if (ccf->rlimit_sigpending != NGX_CONF_UNSET) {
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
846 rlmt.rlim_cur = (rlim_t) ccf->rlimit_sigpending;
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
847 rlmt.rlim_max = (rlim_t) ccf->rlimit_sigpending;
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
848
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
849 if (setrlimit(RLIMIT_SIGPENDING, &rlmt) == -1) {
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
850 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
851 "setrlimit(RLIMIT_SIGPENDING, %i) failed",
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
852 ccf->rlimit_sigpending);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
853 }
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
854 }
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
855 #endif
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
856
328
390b8f8309d6 nginx 0.6.8
Igor Sysoev <http://sysoev.ru>
parents: 290
diff changeset
857 if (geteuid() == 0) {
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
858 if (setgid(ccf->group) == -1) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
859 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
860 "setgid(%d) failed", ccf->group);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
861 /* fatal */
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
862 exit(2);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
863 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
864
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
865 if (initgroups(ccf->username, ccf->group) == -1) {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
866 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
867 "initgroups(%s, %d) failed",
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
868 ccf->username, ccf->group);
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
869 }
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
870
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
871 if (setuid(ccf->user) == -1) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
872 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
873 "setuid(%d) failed", ccf->user);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
874 /* fatal */
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
875 exit(2);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
876 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
877 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
878
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
879 #if (NGX_HAVE_SCHED_SETAFFINITY)
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
880
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
881 if (cpu_affinity) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
882 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
883 "sched_setaffinity(0x%08Xl)", cpu_affinity);
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
884
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
885 if (sched_setaffinity(0, 32, (cpu_set_t *) &cpu_affinity) == -1) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
886 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
887 "sched_setaffinity(0x%08Xl) failed", cpu_affinity);
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
888 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
889 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
890
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
891 #endif
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
892
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
893 #if (NGX_HAVE_PR_SET_DUMPABLE)
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
894
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
895 /* allow coredump after setuid() in Linux 2.4.x */
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
896
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
897 if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) == -1) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
898 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
899 "prctl(PR_SET_DUMPABLE) failed");
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
900 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
901
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
902 #endif
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
903
70
8ad297c88dcb nginx 0.1.35
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
904 if (ccf->working_directory.len) {
72
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
905 if (chdir((char *) ccf->working_directory.data) == -1) {
70
8ad297c88dcb nginx 0.1.35
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
906 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
8ad297c88dcb nginx 0.1.35
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
907 "chdir(\"%s\") failed", ccf->working_directory.data);
8ad297c88dcb nginx 0.1.35
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
908 /* fatal */
8ad297c88dcb nginx 0.1.35
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
909 exit(2);
8ad297c88dcb nginx 0.1.35
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
910 }
8ad297c88dcb nginx 0.1.35
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
911 }
8ad297c88dcb nginx 0.1.35
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
912
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
913 sigemptyset(&set);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
914
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
915 if (sigprocmask(SIG_SETMASK, &set, NULL) == -1) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
916 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
917 "sigprocmask() failed");
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
918 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
919
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
920 ngx_init_temp_number();
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
921
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
922 /*
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
923 * disable deleting previous events for the listening sockets because
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
924 * in the worker processes there are no events at all at this point
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
925 */
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
926 ls = cycle->listening.elts;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
927 for (i = 0; i < cycle->listening.nelts; i++) {
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
928 ls[i].previous = NULL;
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
929 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
930
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
931 for (i = 0; ngx_modules[i]; i++) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
932 if (ngx_modules[i]->init_process) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
933 if (ngx_modules[i]->init_process(cycle) == NGX_ERROR) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
934 /* fatal */
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
935 exit(2);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
936 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
937 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
938 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
939
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
940 for (n = 0; n < ngx_last_process; n++) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
941
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
942 if (ngx_processes[n].pid == -1) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
943 continue;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
944 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
945
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
946 if (n == ngx_process_slot) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
947 continue;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
948 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
949
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
950 if (ngx_processes[n].channel[1] == -1) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
951 continue;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
952 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
953
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
954 if (close(ngx_processes[n].channel[1]) == -1) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
955 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
956 "close() channel failed");
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
957 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
958 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
959
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
960 if (close(ngx_processes[ngx_process_slot].channel[0]) == -1) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
961 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
962 "close() channel failed");
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
963 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
964
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
965 #if 0
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
966 ngx_last_process = 0;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
967 #endif
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
968
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
969 if (ngx_add_channel_event(cycle, ngx_channel, NGX_READ_EVENT,
290
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
970 ngx_channel_handler)
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
971 == NGX_ERROR)
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
972 {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
973 /* fatal */
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
974 exit(2);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
975 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
976 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
977
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
978
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
979 static void
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
980 ngx_worker_process_exit(ngx_cycle_t *cycle)
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
981 {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
982 ngx_uint_t i;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
983 ngx_connection_t *c;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
984
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
985 #if (NGX_THREADS)
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
986 ngx_terminate = 1;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
987
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
988 ngx_wakeup_worker_threads(cycle);
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
989 #endif
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
990
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
991 for (i = 0; ngx_modules[i]; i++) {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
992 if (ngx_modules[i]->exit_process) {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
993 ngx_modules[i]->exit_process(cycle);
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
994 }
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
995 }
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
996
366
babd3d9efb62 nginx 0.6.27
Igor Sysoev <http://sysoev.ru>
parents: 356
diff changeset
997 if (ngx_exiting) {
136
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
998 c = cycle->connections;
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
999 for (i = 0; i < cycle->connection_n; i++) {
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1000 if (c[i].fd != -1
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1001 && c[i].read
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1002 && !c[i].read->accept
366
babd3d9efb62 nginx 0.6.27
Igor Sysoev <http://sysoev.ru>
parents: 356
diff changeset
1003 && !c[i].read->channel
babd3d9efb62 nginx 0.6.27
Igor Sysoev <http://sysoev.ru>
parents: 356
diff changeset
1004 && !c[i].read->resolver)
136
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1005 {
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1006 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
366
babd3d9efb62 nginx 0.6.27
Igor Sysoev <http://sysoev.ru>
parents: 356
diff changeset
1007 "open socket #%d left in %ui connection %s",
babd3d9efb62 nginx 0.6.27
Igor Sysoev <http://sysoev.ru>
parents: 356
diff changeset
1008 c[i].fd, i, ngx_debug_quit ? ", aborting" : "");
136
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1009 ngx_debug_point();
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1010 }
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1011 }
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1012
136
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1013 if (ngx_debug_quit) {
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1014 ngx_debug_point();
3656228c0b56 nginx 0.3.15
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
1015 }
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1016 }
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1017
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1018 /*
332
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1019 * Copy ngx_cycle->log related data to the special static exit cycle,
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1020 * log, and log file structures enough to allow a signal handler to log.
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1021 * The handler may be called when standard ngx_cycle->log allocated from
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1022 * ngx_cycle->pool is already destroyed.
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1023 */
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1024
332
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1025 ngx_exit_log_file.fd = ngx_cycle->log->file->fd;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1026
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1027 ngx_exit_log = *ngx_cycle->log;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1028 ngx_exit_log.file = &ngx_exit_log_file;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1029
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1030 ngx_exit_cycle.log = &ngx_exit_log;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1031 ngx_cycle = &ngx_exit_cycle;
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1032
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1033 ngx_destroy_pool(cycle->pool);
332
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1034
3a91bfeffaba nginx 0.6.10
Igor Sysoev <http://sysoev.ru>
parents: 328
diff changeset
1035 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0, "exit");
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1036
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1037 exit(0);
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1038 }
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1039
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1040
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 120
diff changeset
1041 static void
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1042 ngx_channel_handler(ngx_event_t *ev)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1043 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1044 ngx_int_t n;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1045 ngx_channel_t ch;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1046 ngx_connection_t *c;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1047
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1048 if (ev->timedout) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1049 ev->timedout = 0;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1050 return;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1051 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1052
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1053 c = ev->data;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1054
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1055 ngx_log_debug0(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel handler");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1056
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1057 for ( ;; ) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1058
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1059 n = ngx_read_channel(c->fd, &ch, sizeof(ngx_channel_t), ev->log);
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1060
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1061 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel: %i", n);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1062
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1063 if (n == NGX_ERROR) {
366
babd3d9efb62 nginx 0.6.27
Igor Sysoev <http://sysoev.ru>
parents: 356
diff changeset
1064
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1065 if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1066 ngx_del_conn(c, 0);
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1067 }
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1068
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1069 ngx_close_connection(c);
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1070 return;
366
babd3d9efb62 nginx 0.6.27
Igor Sysoev <http://sysoev.ru>
parents: 356
diff changeset
1071 }
babd3d9efb62 nginx 0.6.27
Igor Sysoev <http://sysoev.ru>
parents: 356
diff changeset
1072
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1073 if (ngx_event_flags & NGX_USE_EVENTPORT_EVENT) {
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1074 if (ngx_add_event(ev, NGX_READ_EVENT, 0) == NGX_ERROR) {
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1075 return;
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1076 }
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1077 }
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
1078
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1079 if (n == NGX_AGAIN) {
290
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
1080 return;
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
1081 }
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1082
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1083 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0,
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1084 "channel command: %d", ch.command);
290
f745bf973510 nginx 0.5.15
Igor Sysoev <http://sysoev.ru>
parents: 278
diff changeset
1085
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1086 switch (ch.command) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1087
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1088 case NGX_CMD_QUIT:
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1089 ngx_quit = 1;
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1090 break;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1091
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1092 case NGX_CMD_TERMINATE:
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1093 ngx_terminate = 1;
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1094 break;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1095
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1096 case NGX_CMD_REOPEN:
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1097 ngx_reopen = 1;
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1098 break;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1099
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1100 case NGX_CMD_OPEN_CHANNEL:
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1101
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1102 ngx_log_debug3(NGX_LOG_DEBUG_CORE, ev->log, 0,
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1103 "get channel s:%i pid:%P fd:%d",
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1104 ch.slot, ch.pid, ch.fd);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1105
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1106 ngx_processes[ch.slot].pid = ch.pid;
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1107 ngx_processes[ch.slot].channel[0] = ch.fd;
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1108 break;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1109
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1110 case NGX_CMD_CLOSE_CHANNEL:
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1111
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1112 ngx_log_debug4(NGX_LOG_DEBUG_CORE, ev->log, 0,
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1113 "close channel s:%i pid:%P our:%P fd:%d",
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1114 ch.slot, ch.pid, ngx_processes[ch.slot].pid,
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1115 ngx_processes[ch.slot].channel[0]);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1116
378
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1117 if (close(ngx_processes[ch.slot].channel[0]) == -1) {
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1118 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1119 "close() channel failed");
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1120 }
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1121
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1122 ngx_processes[ch.slot].channel[0] = -1;
820f6378fc00 nginx 0.7.1
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
1123 break;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1124 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1125 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1126 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1127
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1128
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1129 #if (NGX_THREADS)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1130
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1131 static void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1132 ngx_wakeup_worker_threads(ngx_cycle_t *cycle)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1133 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1134 ngx_int_t i;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1135 ngx_uint_t live;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1136
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1137 for ( ;; ) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1138
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1139 live = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1140
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1141 for (i = 0; i < ngx_threads_n; i++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1142 if (ngx_threads[i].state < NGX_THREAD_EXIT) {
18
6f8b0dc0f8dd nginx 0.1.9
Igor Sysoev <http://sysoev.ru>
parents: 16
diff changeset
1143 if (ngx_cond_signal(ngx_threads[i].cv) == NGX_ERROR) {
6f8b0dc0f8dd nginx 0.1.9
Igor Sysoev <http://sysoev.ru>
parents: 16
diff changeset
1144 ngx_threads[i].state = NGX_THREAD_DONE;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1145
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1146 } else {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1147 live = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1148 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1149 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1150
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1151 if (ngx_threads[i].state == NGX_THREAD_EXIT) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1152 ngx_thread_join(ngx_threads[i].tid, NULL);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1153 ngx_threads[i].state = NGX_THREAD_DONE;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1154 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1155 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1156
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1157 if (live == 0) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1158 ngx_log_debug0(NGX_LOG_DEBUG_CORE, cycle->log, 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1159 "all worker threads are joined");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1160
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1161 /* STUB */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1162 ngx_done_events(cycle);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1163 ngx_mutex_destroy(ngx_event_timer_mutex);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1164 ngx_mutex_destroy(ngx_posted_events_mutex);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1165
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1166 return;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1167 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1168
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1169 ngx_sched_yield();
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1170 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1171 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1172
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1173
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1174 static ngx_thread_value_t
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1175 ngx_worker_thread_cycle(void *data)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1176 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1177 ngx_thread_t *thr = data;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1178
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1179 sigset_t set;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1180 ngx_err_t err;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1181 ngx_core_tls_t *tls;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1182 ngx_cycle_t *cycle;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1183
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1184 cycle = (ngx_cycle_t *) ngx_cycle;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1185
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1186 sigemptyset(&set);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1187 sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1188 sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1189 sigaddset(&set, ngx_signal_value(NGX_CHANGEBIN_SIGNAL));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1190
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1191 err = ngx_thread_sigmask(SIG_BLOCK, &set, NULL);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1192 if (err) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1193 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1194 ngx_thread_sigmask_n " failed");
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1195 return (ngx_thread_value_t) 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1196 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1197
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1198 ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
1199 "thread " NGX_TID_T_FMT " started", ngx_thread_self());
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1200
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1201 ngx_setthrtitle("worker thread");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1202
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1203 tls = ngx_calloc(sizeof(ngx_core_tls_t), cycle->log);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1204 if (tls == NULL) {
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1205 return (ngx_thread_value_t) 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1206 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1207
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1208 err = ngx_thread_set_tls(ngx_core_tls_key, tls);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1209 if (err != 0) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1210 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1211 ngx_thread_set_tls_n " failed");
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1212 return (ngx_thread_value_t) 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1213 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1214
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1215 ngx_mutex_lock(ngx_posted_events_mutex);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1216
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1217 for ( ;; ) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1218 thr->state = NGX_THREAD_FREE;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1219
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1220 if (ngx_cond_wait(thr->cv, ngx_posted_events_mutex) == NGX_ERROR) {
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1221 return (ngx_thread_value_t) 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1222 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1223
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1224 if (ngx_terminate) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1225 thr->state = NGX_THREAD_EXIT;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1226
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1227 ngx_mutex_unlock(ngx_posted_events_mutex);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1228
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1229 ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
1230 "thread " NGX_TID_T_FMT " is done",
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
1231 ngx_thread_self());
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1232
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1233 return (ngx_thread_value_t) 0;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1234 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1235
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1236 thr->state = NGX_THREAD_BUSY;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1237
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1238 if (ngx_event_thread_process_posted(cycle) == NGX_ERROR) {
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1239 return (ngx_thread_value_t) 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1240 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1241
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1242 if (ngx_event_thread_process_posted(cycle) == NGX_ERROR) {
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1243 return (ngx_thread_value_t) 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1244 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1245
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1246 if (ngx_process_changes) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1247 if (ngx_process_changes(cycle, 1) == NGX_ERROR) {
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1248 return (ngx_thread_value_t) 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1249 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1250 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1251 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1252 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1253
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1254 #endif
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1255
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1256
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1257 #if 0
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1258
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1259 static void
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1260 ngx_garbage_collector_cycle(ngx_cycle_t *cycle, void *data)
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1261 {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1262 ngx_uint_t i;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1263 ngx_gc_t ctx;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1264 ngx_path_t **path;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1265 ngx_event_t *ev;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1266
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
1267 ngx_worker_process_init(cycle, 0);
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1268
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 84
diff changeset
1269 ev = &cycle->read_events0[ngx_channel];
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1270
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1271 ngx_accept_mutex = NULL;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1272
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1273 ngx_setproctitle("garbage collector");
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1274
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1275 #if 0
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1276 ngx_add_timer(ev, 60 * 1000);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1277 #endif
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1278
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1279 for ( ;; ) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1280
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1281 if (ngx_terminate || ngx_quit) {
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
1282 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1283 exit(0);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1284 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1285
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1286 if (ngx_reopen) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1287 ngx_reopen = 0;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
1288 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reopening logs");
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1289 ngx_reopen_files(cycle, -1);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1290 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1291
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1292 path = cycle->pathes.elts;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1293 for (i = 0; i < cycle->pathes.nelts; i++) {
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1294 ctx.path = path[i];
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1295 ctx.log = cycle->log;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
1296 ctx.handler = path[i]->cleaner;
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1297
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1298 ngx_collect_garbage(&ctx, &path[i]->name, 0);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1299 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1300
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1301 ngx_add_timer(ev, 60 * 60 * 1000);
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1302
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
1303 ngx_process_events_and_timers(cycle);
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1304 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
1305 }
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1306
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
1307 #endif