annotate src/core/nginx.c @ 196:8759b346e431 NGINX_0_3_45

nginx 0.3.45 *) Feature: the "ssl_verify_client", "ssl_verify_depth", and "ssl_client_certificate" directives. *) Change: the $request_method variable now returns the main request method. *) Change: the ° symbol codes were changed in koi-win conversion table. *) Feature: the euro É N symbols were added to koi-win conversion table. *) Bugfix: if nginx distributed the requests among several backends and some backend failed, then requests intended for this backend was directed to one live backend only instead of being distributed among the rest.
author Igor Sysoev <http://sysoev.ru>
date Sat, 06 May 2006 00:00:00 +0400
parents 3689cd4e3228
children ff906029dd40
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 <nginx.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 ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle);
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
14 static ngx_int_t ngx_getopt(ngx_cycle_t *cycle, int argc, char *const *argv);
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
15 static ngx_int_t ngx_save_argv(ngx_cycle_t *cycle, int argc, char *const *argv);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
16 static void *ngx_core_module_create_conf(ngx_cycle_t *cycle);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
17 static char *ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
18 static char *ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
19 static char *ngx_set_priority(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
20 static char *ngx_set_cpu_affinity(ngx_conf_t *cf, ngx_command_t *cmd,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
21 void *conf);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
23
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
24 static ngx_conf_enum_t ngx_debug_points[] = {
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
25 { ngx_string("stop"), NGX_DEBUG_POINTS_STOP },
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
26 { ngx_string("abort"), NGX_DEBUG_POINTS_ABORT },
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
27 { ngx_null_string, 0 }
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
28 };
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
29
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
30
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
31 static ngx_command_t ngx_core_commands[] = {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
32
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
33 { ngx_string("daemon"),
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
34 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_FLAG,
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35 ngx_conf_set_flag_slot,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 offsetof(ngx_core_conf_t, daemon),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38 NULL },
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40 { ngx_string("master_process"),
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
41 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_FLAG,
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42 ngx_conf_set_flag_slot,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
44 offsetof(ngx_core_conf_t, master),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45 NULL },
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
47 { ngx_string("timer_resolution"),
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
48 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
49 ngx_conf_set_msec_slot,
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
50 0,
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
51 offsetof(ngx_core_conf_t, timer_resolution),
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
52 NULL },
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
53
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
54 { ngx_string("pid"),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
55 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
56 ngx_conf_set_str_slot,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
57 0,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
58 offsetof(ngx_core_conf_t, pid),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
59 NULL },
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
60
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
61 { ngx_string("lock_file"),
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
62 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
63 ngx_conf_set_str_slot,
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
64 0,
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
65 offsetof(ngx_core_conf_t, lock_file),
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
66 NULL },
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
67
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
68 { ngx_string("worker_processes"),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
69 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
70 ngx_conf_set_num_slot,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
71 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
72 offsetof(ngx_core_conf_t, worker_processes),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
73 NULL },
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
74
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
75 { ngx_string("debug_points"),
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
76 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
77 ngx_conf_set_enum_slot,
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
78 0,
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
79 offsetof(ngx_core_conf_t, debug_points),
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
80 &ngx_debug_points },
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
81
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
82 { ngx_string("user"),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
83 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE12,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
84 ngx_set_user,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
85 0,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
86 0,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
87 NULL },
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
88
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
89 { ngx_string("worker_priority"),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
90 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
91 ngx_set_priority,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
92 0,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
93 0,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
94 NULL },
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
95
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
96 { ngx_string("worker_cpu_affinity"),
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
97 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_1MORE,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
98 ngx_set_cpu_affinity,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
99 0,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
100 0,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
101 NULL },
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
102
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
103 { ngx_string("worker_rlimit_nofile"),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
104 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
105 ngx_conf_set_num_slot,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
106 0,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
107 offsetof(ngx_core_conf_t, rlimit_nofile),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
108 NULL },
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
109
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
110 { ngx_string("worker_rlimit_core"),
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
111 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
112 ngx_conf_set_num_slot,
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
113 0,
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
114 offsetof(ngx_core_conf_t, rlimit_core),
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
115 NULL },
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
116
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
117 { ngx_string("worker_rlimit_sigpending"),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
118 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
119 ngx_conf_set_num_slot,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
120 0,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
121 offsetof(ngx_core_conf_t, rlimit_sigpending),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
122 NULL },
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
123
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
124 { ngx_string("working_directory"),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
125 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
126 ngx_conf_set_str_slot,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
127 0,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
128 offsetof(ngx_core_conf_t, working_directory),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
129 NULL },
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
130
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
131 #if (NGX_THREADS)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
132
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
133 { ngx_string("worker_threads"),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
134 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
135 ngx_conf_set_num_slot,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
136 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
137 offsetof(ngx_core_conf_t, worker_threads),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
138 NULL },
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
139
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
140 { ngx_string("thread_stack_size"),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
141 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
142 ngx_conf_set_size_slot,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
143 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
144 offsetof(ngx_core_conf_t, thread_stack_size),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
145 NULL },
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
146
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
147 #endif
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 ngx_null_command
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
150 };
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
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
153 static ngx_core_module_t ngx_core_module_ctx = {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
154 ngx_string("core"),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
155 ngx_core_module_create_conf,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
156 ngx_core_module_init_conf
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
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
159
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
160 ngx_module_t ngx_core_module = {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 54
diff changeset
161 NGX_MODULE_V1,
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
162 &ngx_core_module_ctx, /* module context */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
163 ngx_core_commands, /* module directives */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
164 NGX_CORE_MODULE, /* module type */
90
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
165 NULL, /* init master */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
166 NULL, /* init module */
90
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
167 NULL, /* init process */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
168 NULL, /* init thread */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
169 NULL, /* exit thread */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
170 NULL, /* exit process */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
171 NULL, /* exit master */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
172 NGX_MODULE_V1_PADDING
0
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
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
175
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
176 ngx_uint_t ngx_max_module;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
177
188
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
178 static ngx_uint_t ngx_show_version;
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
179
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
180 static char *ngx_null_environ = NULL;
150
50bd986c5d63 nginx 0.3.22
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
181
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
182
52
0d75d65c642f nginx 0.1.26
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
183 int ngx_cdecl
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
184 main(int argc, char *const *argv)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
185 {
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
186 ngx_int_t i;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
187 ngx_log_t *log;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
188 ngx_cycle_t *cycle, init_cycle;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
189 ngx_core_conf_t *ccf;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
190
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
191 #if (NGX_FREEBSD)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
192 ngx_debug_init();
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
193 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
194
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
195 /* TODO */ ngx_max_sockets = -1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
196
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
197 ngx_time_init();
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
198
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
199 #if (NGX_PCRE)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
200 ngx_regex_init();
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
201 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
202
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
203 ngx_pid = ngx_getpid();
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
204
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
205 log = ngx_log_init();
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
206 if (log == NULL) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
207 return 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
208 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
209
90
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
210 /* STUB */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
211 #if (NGX_OPENSSL)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
212 ngx_ssl_init(log);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
213 #endif
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 /* init_cycle->log is required for signal handlers and ngx_getopt() */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
216
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
217 ngx_memzero(&init_cycle, sizeof(ngx_cycle_t));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
218 init_cycle.log = log;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
219 ngx_cycle = &init_cycle;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
220
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
221 init_cycle.pool = ngx_create_pool(1024, log);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
222 if (init_cycle.pool == NULL) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
223 return 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
224 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
225
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
226 if (ngx_save_argv(&init_cycle, argc, argv) != NGX_OK) {
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
227 return 1;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
228 }
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
229
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
230 if (ngx_getopt(&init_cycle, argc, ngx_argv) != NGX_OK) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
231 return 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
232 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
233
188
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
234 if (ngx_show_version) {
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
235 ngx_write_fd(ngx_stderr_fileno, "nginx version: " NGINX_VER CRLF,
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
236 sizeof("nginx version: " NGINX_VER CRLF) - 1);
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
237
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
238 #ifdef NGX_COMPILER
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
239 ngx_write_fd(ngx_stderr_fileno, "built by " NGX_COMPILER CRLF,
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
240 sizeof("built by " NGX_COMPILER CRLF) - 1);
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
241 #endif
190
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 188
diff changeset
242 if (!ngx_test_config) {
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 188
diff changeset
243 return 0;
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 188
diff changeset
244 }
188
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
245 }
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
246
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
247 if (ngx_test_config) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
248 log->log_level = NGX_LOG_INFO;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
249 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
250
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
251 if (ngx_os_init(log) != NGX_OK) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
252 return 1;
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
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
255 if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
256 return 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
257 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
258
150
50bd986c5d63 nginx 0.3.22
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
259 environ = &ngx_null_environ;
50bd986c5d63 nginx 0.3.22
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
260
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
261 ngx_max_module = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
262 for (i = 0; ngx_modules[i]; i++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
263 ngx_modules[i]->index = ngx_max_module++;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
264 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
265
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
266 cycle = ngx_init_cycle(&init_cycle);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
267 if (cycle == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
268 if (ngx_test_config) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
269 ngx_log_error(NGX_LOG_EMERG, log, 0,
106
45f7329b4bd0 nginx 0.3.0
Igor Sysoev <http://sysoev.ru>
parents: 92
diff changeset
270 "the configuration file %s test failed",
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
271 init_cycle.conf_file.data);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
272 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
273
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
274 return 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
275 }
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 if (ngx_test_config) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
278 ngx_log_error(NGX_LOG_INFO, log, 0,
106
45f7329b4bd0 nginx 0.3.0
Igor Sysoev <http://sysoev.ru>
parents: 92
diff changeset
279 "the configuration file %s was tested successfully",
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
280 cycle->conf_file.data);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
281 return 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
282 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
283
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
284 ngx_os_status(cycle->log);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
285
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
286 ngx_cycle = cycle;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
287
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
288 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
289
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
290 ngx_process = ccf->master ? NGX_PROCESS_MASTER : NGX_PROCESS_SINGLE;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
291
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
292 #if (NGX_WIN32)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
293
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
294 #if 0
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 TODO:
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
297
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
298 if (ccf->run_as_service) {
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
299 if (ngx_service(cycle->log) != NGX_OK) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
300 return 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
301 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
302
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
303 return 0;
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 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
306
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
307 #else
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
308
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
309 if (ngx_init_signals(cycle->log) != NGX_OK) {
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 86
diff changeset
310 return 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 86
diff changeset
311 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 86
diff changeset
312
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
313 if (!ngx_inherited && ccf->daemon) {
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
314 if (ngx_daemon(cycle->log) != NGX_OK) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
315 return 1;
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
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
318 ngx_daemonized = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
319 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
320
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
321 if (ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
322 return 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
323 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
324
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
325 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
326
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
327 if (ngx_process == NGX_PROCESS_MASTER) {
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
328 ngx_master_process_cycle(cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
329
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
330 } else {
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
331 ngx_single_process_cycle(cycle);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
332 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
333
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
334 return 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
335 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
336
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
337
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
338 static ngx_int_t
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
339 ngx_add_inherited_sockets(ngx_cycle_t *cycle)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
340 {
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
341 u_char *p, *v, *inherited;
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
342 ngx_int_t s;
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
343 ngx_listening_t *ls;
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 inherited = (u_char *) getenv(NGINX_VAR);
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 if (inherited == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
348 return NGX_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
349 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
350
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
351 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0,
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
352 "using inherited sockets from \"%s\"", inherited);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
353
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
354 if (ngx_array_init(&cycle->listening, cycle->pool, 10,
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
355 sizeof(ngx_listening_t)) == NGX_ERROR)
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
356 {
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
357 return NGX_ERROR;
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
358 }
0
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 for (p = inherited, v = p; *p; p++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
361 if (*p == ':' || *p == ';') {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
362 s = ngx_atoi(v, p - v);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
363 if (s == NGX_ERROR) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
364 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
86
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
365 "invalid socket number \"%s\" in " NGINX_VAR
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
366 " environment variable, ignoring the rest"
962c43960644 nginx 0.1.43
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
367 " of the variable", v);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
368 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
369 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
370
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
371 v = p + 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
372
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
373 ls = ngx_array_push(&cycle->listening);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
374 if (ls == NULL) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
375 return NGX_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
376 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
377
72
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
378 ngx_memzero(ls, sizeof(ngx_listening_t));
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
379
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
380 ls->fd = (ngx_socket_t) s;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
381 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
382 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
383
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
384 ngx_inherited = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
385
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
386 return ngx_set_inherited_sockets(cycle);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
387 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
388
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
389
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
390 ngx_pid_t
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
391 ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
392 {
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
393 char *env[3], *var;
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
394 u_char *p;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
395 ngx_uint_t i;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
396 ngx_pid_t pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
397 ngx_exec_ctx_t ctx;
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
398 ngx_core_conf_t *ccf;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
399 ngx_listening_t *ls;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
400
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
401 ctx.path = argv[0];
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
402 ctx.name = "new binary process";
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
403 ctx.argv = argv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
404
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
405 var = ngx_alloc(sizeof(NGINX_VAR)
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
406 + cycle->listening.nelts * (NGX_INT32_LEN + 1) + 2,
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
407 cycle->log);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
408
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
409 p = ngx_cpymem(var, NGINX_VAR "=", sizeof(NGINX_VAR));
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
410
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
411 ls = cycle->listening.elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
412 for (i = 0; i < cycle->listening.nelts; i++) {
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
413 p = ngx_sprintf(p, "%ud;", ls[i].fd);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
414 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
415
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
416 *p = '\0';
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
417
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
418 ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0, "inherited: %s", var);
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 env[0] = var;
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
421
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
422 #if (NGX_SETPROCTITLE_USES_ENV)
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
423
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
424 /* allocate the spare 300 bytes for the new binary process title */
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
425
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
426 env[1] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
427 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
428 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
429 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
430 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
431
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
432 env[2] = NULL;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
433
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
434 #else
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
435
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
436 env[1] = NULL;
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
437
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
438 #endif
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
439
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
440 ctx.envp = (char *const *) &env;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
441
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
442 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
443
182
13710a1813ad nginx 0.3.38
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
444 if (ngx_rename_file(ccf->pid.data, ccf->oldpid.data)
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
445 != NGX_OK)
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
446 {
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
447 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
448 ngx_rename_file_n " %s to %s failed "
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
449 "before executing new binary process \"%s\"",
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
450 ccf->pid.data, ccf->oldpid.data, argv[0]);
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
451
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
452 ngx_free(var);
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
453
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
454 return NGX_INVALID_PID;
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
455 }
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
456
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
457 pid = ngx_execute(cycle, &ctx);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
458
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
459 if (pid == NGX_INVALID_PID) {
182
13710a1813ad nginx 0.3.38
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
460 if (ngx_rename_file(ccf->oldpid.data, ccf->pid.data)
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
461 != NGX_OK)
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
462 {
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
463 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
464 ngx_rename_file_n " %s back to %s failed "
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
465 "after try to executing new binary process \"%s\"",
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
466 ccf->oldpid.data, ccf->pid.data, argv[0]);
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
467 }
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
468 }
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
469
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
470 ngx_free(var);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
471
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
472 return pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
473 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
474
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
475
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
476 static ngx_int_t
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
477 ngx_getopt(ngx_cycle_t *cycle, int argc, char *const *argv)
0
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 ngx_int_t i;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
480
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
481 for (i = 1; i < argc; i++) {
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
482 if (argv[i][0] != '-') {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
483 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
484 "invalid option: \"%s\"", argv[i]);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
485 return NGX_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
486 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
487
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
488 switch (argv[i][1]) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
489
188
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
490 case 'v':
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
491 ngx_show_version = 1;
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
492 break;
af37b7cb6698 nginx 0.3.41
Igor Sysoev <http://sysoev.ru>
parents: 182
diff changeset
493
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
494 case 't':
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
495 ngx_test_config = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
496 break;
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 case 'c':
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
499 if (argv[i + 1] == NULL) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
500 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
501 "the option: \"%s\" requires file name",
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
502 argv[i]);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
503 return NGX_ERROR;
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
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
506 cycle->conf_file.data = (u_char *) argv[++i];
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
507 cycle->conf_file.len = ngx_strlen(cycle->conf_file.data);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
508 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
509
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
510 default:
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
511 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
512 "invalid option: \"%s\"", argv[i]);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
513 return NGX_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
514 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
515 }
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 if (cycle->conf_file.data == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
518 cycle->conf_file.len = sizeof(NGX_CONF_PATH) - 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
519 cycle->conf_file.data = (u_char *) NGX_CONF_PATH;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
520 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
521
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
522 if (ngx_conf_full_name(cycle, &cycle->conf_file) == NGX_ERROR) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
523 return NGX_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
524 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
525
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
526 return NGX_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
527 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
528
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
529
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
530 static ngx_int_t
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
531 ngx_save_argv(ngx_cycle_t *cycle, int argc, char *const *argv)
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
532 {
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
533 #if (NGX_FREEBSD)
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
534
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
535 ngx_os_argv = (char **) argv;
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
536 ngx_argc = argc;
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
537 ngx_argv = (char **) argv;
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
538
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
539 #else
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
540 size_t len;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
541 ngx_int_t i;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
542
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
543 ngx_os_argv = (char **) argv;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
544 ngx_argc = argc;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
545
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
546 ngx_argv = ngx_alloc((argc + 1) * sizeof(char *), cycle->log);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
547 if (ngx_argv == NULL) {
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
548 return NGX_ERROR;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
549 }
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
550
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
551 for (i = 0; i < argc; i++) {
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
552 len = ngx_strlen(argv[i]) + 1;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
553
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
554 ngx_argv[i] = ngx_alloc(len, cycle->log);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
555 if (ngx_argv[i] == NULL) {
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
556 return NGX_ERROR;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
557 }
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
558
66
818201e5a553 nginx 0.1.33
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
559 (void) ngx_cpystrn((u_char *) ngx_argv[i], (u_char *) argv[i], len);
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
560 }
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
561
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
562 ngx_argv[i] = NULL;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
563
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
564 #endif
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
565
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
566 return NGX_OK;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
567 }
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
568
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
569
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
570 static void *
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
571 ngx_core_module_create_conf(ngx_cycle_t *cycle)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
572 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
573 ngx_core_conf_t *ccf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
574
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
575 ccf = ngx_pcalloc(cycle->pool, sizeof(ngx_core_conf_t));
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
576 if (ccf == NULL) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
577 return NULL;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
578 }
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
579
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
580 /*
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
581 * set by pcalloc()
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
582 *
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
583 * ccf->pid = NULL;
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
584 * ccf->oldpid = NULL;
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
585 * ccf->priority = 0;
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
586 * ccf->cpu_affinity_n = 0;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
587 * ccf->cpu_affinity = NULL;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
588 */
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents: 22
diff changeset
589
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
590 ccf->daemon = NGX_CONF_UNSET;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
591 ccf->master = NGX_CONF_UNSET;
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
592 ccf->timer_resolution = NGX_CONF_UNSET_MSEC;
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
593
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
594 ccf->worker_processes = NGX_CONF_UNSET;
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
595 ccf->debug_points = NGX_CONF_UNSET;
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
596
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
597 ccf->rlimit_nofile = NGX_CONF_UNSET;
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
598 ccf->rlimit_core = NGX_CONF_UNSET;
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
599 ccf->rlimit_sigpending = NGX_CONF_UNSET;
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
600
66
818201e5a553 nginx 0.1.33
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
601 ccf->user = (ngx_uid_t) NGX_CONF_UNSET_UINT;
818201e5a553 nginx 0.1.33
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
602 ccf->group = (ngx_gid_t) NGX_CONF_UNSET_UINT;
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
603
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
604 #if (NGX_THREADS)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
605 ccf->worker_threads = NGX_CONF_UNSET;
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
606 ccf->thread_stack_size = NGX_CONF_UNSET_SIZE;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
607 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
608
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
609 return ccf;
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
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
612
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
613 static char *
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
614 ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
615 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
616 ngx_core_conf_t *ccf = conf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
617
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
618 #if !(NGX_WIN32)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
619 struct passwd *pwd;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
620 struct group *grp;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
621 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
622
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
623 ngx_conf_init_value(ccf->daemon, 1);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
624 ngx_conf_init_value(ccf->master, 1);
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
625 ngx_conf_init_msec_value(ccf->timer_resolution, 0);
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
626
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
627 ngx_conf_init_value(ccf->worker_processes, 1);
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
628 ngx_conf_init_value(ccf->debug_points, 0);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
629
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
630 #if (NGX_HAVE_SCHED_SETAFFINITY)
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
631
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
632 if (ccf->cpu_affinity_n
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
633 && ccf->cpu_affinity_n != 1
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
634 && ccf->cpu_affinity_n != (ngx_uint_t) ccf->worker_processes)
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
635 {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
636 ngx_log_error(NGX_LOG_WARN, cycle->log, 0,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
637 "number of the \"worker_processes\" is not equal to "
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
638 "the number of the \"worker_cpu_affinity\" mask, "
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
639 "using last mask for remaining worker processes");
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
640 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
641
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
642 #endif
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
643
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
644 #if (NGX_THREADS)
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
645
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
646 ngx_conf_init_value(ccf->worker_threads, 0);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
647 ngx_threads_n = ccf->worker_threads;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
648 ngx_conf_init_size_value(ccf->thread_stack_size, 2 * 1024 * 1024);
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
649
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
650 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
651
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
652 #if !(NGX_WIN32)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
653
66
818201e5a553 nginx 0.1.33
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
654 if (ccf->user == (uid_t) NGX_CONF_UNSET_UINT && geteuid() == 0) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
655
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
656 pwd = getpwnam(NGX_USER);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
657 if (pwd == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
658 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
659 "getpwnam(\"" NGX_USER "\") failed");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
660 return NGX_CONF_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
661 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
662
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
663 ccf->username = NGX_USER;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
664 ccf->user = pwd->pw_uid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
665
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
666 grp = getgrnam(NGX_GROUP);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
667 if (grp == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
668 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
669 "getgrnam(\"" NGX_GROUP "\") failed");
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
670 return NGX_CONF_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
671 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
672
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
673 ccf->group = grp->gr_gid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
674 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
675
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
676 if (ccf->pid.len == 0) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
677 ccf->pid.len = sizeof(NGX_PID_PATH) - 1;
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
678 ccf->pid.data = (u_char *) NGX_PID_PATH;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
679 }
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 if (ngx_conf_full_name(cycle, &ccf->pid) == NGX_ERROR) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
682 return NGX_CONF_ERROR;
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
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
685 ccf->oldpid.len = ccf->pid.len + sizeof(NGX_OLDPID_EXT);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
686
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
687 ccf->oldpid.data = ngx_palloc(cycle->pool, ccf->oldpid.len);
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
688 if (ccf->oldpid.data == NULL) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
689 return NGX_CONF_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
690 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
691
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
692 ngx_memcpy(ngx_cpymem(ccf->oldpid.data, ccf->pid.data, ccf->pid.len),
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
693 NGX_OLDPID_EXT, sizeof(NGX_OLDPID_EXT));
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
694
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
695 if (ccf->lock_file.len == 0) {
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
696 ccf->lock_file.len = sizeof(NGX_LOCK_PATH) - 1;
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
697 ccf->lock_file.data = (u_char *) NGX_LOCK_PATH;
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
698 }
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
699
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
700 if (ngx_conf_full_name(cycle, &ccf->lock_file) == NGX_ERROR) {
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
701 return NGX_CONF_ERROR;
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
702 }
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 150
diff changeset
703
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
704 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
705
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
706 return NGX_CONF_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
707 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
708
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
709
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
710 static char *
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
711 ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
712 {
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
713 #if (NGX_WIN32)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
714
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
715 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
716 "\"user\" is not supported, ignored");
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 return NGX_CONF_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
719
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
720 #else
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
721
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
722 ngx_core_conf_t *ccf = conf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
723
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
724 char *group;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
725 struct passwd *pwd;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
726 struct group *grp;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
727 ngx_str_t *value;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
728
66
818201e5a553 nginx 0.1.33
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
729 if (ccf->user != (uid_t) NGX_CONF_UNSET_UINT) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
730 return "is duplicate";
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
731 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
732
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
733 if (geteuid() != 0) {
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
734 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
735 "the \"user\" directive makes sense only "
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
736 "if the master process runs "
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
737 "with super-user privileges, ignored");
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
738 return NGX_CONF_OK;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
739 }
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
740
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
741 value = (ngx_str_t *) cf->args->elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
742
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
743 ccf->username = (char *) value[1].data;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
744
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
745 pwd = getpwnam((const char *) value[1].data);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
746 if (pwd == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
747 ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
748 "getpwnam(\"%s\") failed", value[1].data);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
749 return NGX_CONF_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
750 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
751
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
752 ccf->user = pwd->pw_uid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
753
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
754 group = (char *) ((cf->args->nelts == 2) ? value[1].data : value[2].data);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
755
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
756 grp = getgrnam(group);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
757 if (grp == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
758 ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
759 "getgrnam(\"%s\") failed", group);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
760 return NGX_CONF_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
761 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
762
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
763 ccf->group = grp->gr_gid;
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 return NGX_CONF_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
766
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
767 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
768 }
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
769
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
770
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
771 static char *
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
772 ngx_set_priority(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
22
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
773 {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
774 ngx_core_conf_t *ccf = conf;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
775
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
776 ngx_str_t *value;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
777 ngx_uint_t n, minus;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
778
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
779 if (ccf->priority != 0) {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
780 return "is duplicate";
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
781 }
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
782
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
783 value = cf->args->elts;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
784
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
785 if (value[1].data[0] == '-') {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
786 n = 1;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
787 minus = 1;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
788
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
789 } else if (value[1].data[0] == '+') {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
790 n = 1;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
791 minus = 0;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
792
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
793 } else {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
794 n = 0;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
795 minus = 0;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
796 }
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
797
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
798 ccf->priority = ngx_atoi(&value[1].data[n], value[1].len - n);
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
799 if (ccf->priority == NGX_ERROR) {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
800 return "invalid number";
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
801 }
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
802
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
803 if (minus) {
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
804 ccf->priority = -ccf->priority;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
805 }
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
806
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
807 return NGX_CONF_OK;
8b6db3bda591 nginx 0.1.11
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
808 }
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
809
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
810
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
811 static char *
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
812 ngx_set_cpu_affinity(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
813 {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
814 #if (NGX_HAVE_SCHED_SETAFFINITY)
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
815 ngx_core_conf_t *ccf = conf;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
816
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
817 u_char ch;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
818 u_long *mask;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
819 ngx_str_t *value;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
820 ngx_uint_t i, n;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
821
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
822 if (ccf->cpu_affinity) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
823 return "is duplicate";
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
824 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
825
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
826 mask = ngx_palloc(cf->pool, (cf->args->nelts - 1) * sizeof(long));
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
827 if (mask == NULL) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
828 return NGX_CONF_ERROR;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
829 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
830
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
831 ccf->cpu_affinity_n = cf->args->nelts - 1;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
832 ccf->cpu_affinity = mask;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
833
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
834 value = cf->args->elts;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
835
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
836 for (n = 1; n < cf->args->nelts; n++) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
837
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
838 if (value[n].len > 32) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
839 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
840 "\"worker_cpu_affinity\" supports up to 32 CPU only");
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
841 return NGX_CONF_ERROR;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
842 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
843
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
844 mask[n - 1] = 0;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
845
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
846 for (i = 0; i < value[n].len; i++) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
847
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
848 ch = value[n].data[i];
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
849
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
850 if (ch == ' ') {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
851 continue;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
852 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
853
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
854 mask[n - 1] <<= 1;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
855
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
856 if (ch == '0') {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
857 continue;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
858 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
859
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
860 if (ch == '1') {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
861 mask[n - 1] |= 1;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
862 continue;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
863 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
864
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
865 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
866 "invalid character \"%c\" in \"worker_cpu_affinity\"",
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
867 ch);
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
868 return NGX_CONF_ERROR ;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
869 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
870 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
871
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
872 #else
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
873
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
874 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
875 "\"worker_cpu_affinity\" is not supported "
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
876 "on this platform, ignored");
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
877 #endif
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
878
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
879 return NGX_CONF_OK;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
880 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
881
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
882
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
883 u_long
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
884 ngx_get_cpu_affinity(ngx_uint_t n)
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
885 {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
886 ngx_core_conf_t *ccf;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
887
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
888 ccf = (ngx_core_conf_t *) ngx_get_conf(ngx_cycle->conf_ctx,
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
889 ngx_core_module);
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
890
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
891 if (ccf->cpu_affinity == NULL) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
892 return 0;
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
893 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
894
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
895 if (ccf->cpu_affinity_n > n) {
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
896 return ccf->cpu_affinity[n];
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
897 }
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
898
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
899 return ccf->cpu_affinity[ccf->cpu_affinity_n - 1];
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
900 }