annotate src/os/unix/ngx_linux_init.c @ 272:29a6403156b0 NGINX_0_5_6

nginx 0.5.6 *) Change: now the ngx_http_index_module ignores all methods except the GET, HEAD, and POST methods. *) Feature: the ngx_http_limit_zone_module. *) Feature: the $binary_remote_addr variable. *) Feature: the "ssl_session_cache" directives of the ngx_http_ssl_module and ngx_imap_ssl_module. *) Feature: the DELETE method supports recursive removal. *) Bugfix: the byte-ranges were transferred incorrectly if the $r->sendfile() was used.
author Igor Sysoev <http://sysoev.ru>
date Tue, 09 Jan 2007 00:00:00 +0300
parents dd6c66b5b0e2
children eae74a780a84
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
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10
222
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
11 static ngx_int_t ngx_linux_procfs(char *name, char *buf, size_t len,
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
12 ngx_log_t *log);
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
13
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
14
222
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
15 char ngx_linux_kern_ostype[50];
272
29a6403156b0 nginx 0.5.6
Igor Sysoev <http://sysoev.ru>
parents: 222
diff changeset
16 char ngx_linux_kern_osrelease[50];
222
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
17
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
18 int ngx_linux_rtsig_max;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 80
diff changeset
21 static ngx_os_io_t ngx_linux_io = {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22 ngx_unix_recv,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
23 ngx_readv_chain,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24 ngx_unix_send,
18
6f8b0dc0f8dd nginx 0.1.9
Igor Sysoev <http://sysoev.ru>
parents: 16
diff changeset
25 #if (NGX_HAVE_SENDFILE)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26 ngx_linux_sendfile_chain,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
27 NGX_IO_SENDFILE
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
28 #else
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
29 ngx_writev_chain,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
30 0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
31 #endif
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
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34
42
41ccba1aba45 nginx 0.1.21
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
35 ngx_int_t
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 80
diff changeset
36 ngx_os_specific_init(ngx_log_t *log)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 {
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
38 int name[2];
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
39 size_t len;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
40 ngx_err_t err;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41
222
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
42 if (ngx_linux_procfs("/proc/sys/kernel/ostype",
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
43 ngx_linux_kern_ostype,
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
44 sizeof(ngx_linux_kern_ostype), log)
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
45 == -1)
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
46 {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47 return NGX_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
49
222
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
50 if (ngx_linux_procfs("/proc/sys/kernel/osrelease",
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
51 ngx_linux_kern_osrelease,
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
52 sizeof(ngx_linux_kern_osrelease), log)
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
53 == -1)
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
54 {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
55 return NGX_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
56 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58
222
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
59 name[0] = CTL_KERN;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
60 name[1] = KERN_RTSIGMAX;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
61 len = sizeof(ngx_linux_rtsig_max);
42
41ccba1aba45 nginx 0.1.21
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
62
41ccba1aba45 nginx 0.1.21
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
63 if (sysctl(name, 2, &ngx_linux_rtsig_max, &len, NULL, 0) == -1) {
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
64 err = ngx_errno;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
65
222
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
66 if (err != NGX_ENOTDIR && err != NGX_ENOSYS) {
16
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
67 ngx_log_error(NGX_LOG_ALERT, log, err,
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
68 "sysctl(KERN_RTSIGMAX) failed");
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
69
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
70 return NGX_ERROR;
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
71 }
74b1868dd3cd nginx 0.1.8
Igor Sysoev <http://sysoev.ru>
parents: 2
diff changeset
72
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
73 ngx_linux_rtsig_max = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
74 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
75
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 80
diff changeset
77 ngx_os_io = ngx_linux_io;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 80
diff changeset
78
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 80
diff changeset
79 return NGX_OK;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
80 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
81
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
82
42
41ccba1aba45 nginx 0.1.21
Igor Sysoev <http://sysoev.ru>
parents: 18
diff changeset
83 void
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 80
diff changeset
84 ngx_os_specific_status(ngx_log_t *log)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
85 {
80
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
86 ngx_log_error(NGX_LOG_NOTICE, log, 0, "OS: %s %s",
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
87 ngx_linux_kern_ostype, ngx_linux_kern_osrelease);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
88
80
6ae11d59d10e nginx 0.1.40
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
89 ngx_log_error(NGX_LOG_NOTICE, log, 0, "sysctl(KERN_RTSIGMAX): %d",
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
90 ngx_linux_rtsig_max);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
91 }
222
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
92
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
93
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
94 static ngx_int_t
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
95 ngx_linux_procfs(char *name, char *buf, size_t len, ngx_log_t *log)
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
96 {
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
97 int n;
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
98 ngx_fd_t fd;
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
99
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
100 fd = open(name, O_RDONLY);
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
101
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
102 if (fd == NGX_INVALID_FILE) {
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
103 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
104 "open(\"%s\") failed", name);
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
105
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
106 return NGX_ERROR;
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
107 }
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
108
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
109 n = read(fd, buf, len);
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
110
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
111 if (n == -1) {
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
112 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
113 "read(\"%s\") failed", name);
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
114
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
115 } else {
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
116 if (buf[n - 1] == '\n') {
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
117 buf[--n] = '\0';
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
118 }
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
119 }
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
120
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
121 ngx_close_file(fd);
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
122
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
123 return n;
dd6c66b5b0e2 nginx 0.3.58
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
124 }