Annotation of embedaddon/nginx/src/os/unix/ngx_darwin_init.c, revision 1.1.1.1
1.1 misho 1:
2: /*
3: * Copyright (C) Igor Sysoev
4: * Copyright (C) Nginx, Inc.
5: */
6:
7:
8: #include <ngx_config.h>
9: #include <ngx_core.h>
10:
11:
12: char ngx_darwin_kern_ostype[16];
13: char ngx_darwin_kern_osrelease[128];
14: int ngx_darwin_hw_ncpu;
15: int ngx_darwin_kern_ipc_somaxconn;
16: u_long ngx_darwin_net_inet_tcp_sendspace;
17:
18: ngx_uint_t ngx_debug_malloc;
19:
20:
21: static ngx_os_io_t ngx_darwin_io = {
22: ngx_unix_recv,
23: ngx_readv_chain,
24: ngx_udp_unix_recv,
25: ngx_unix_send,
26: #if (NGX_HAVE_SENDFILE)
27: ngx_darwin_sendfile_chain,
28: NGX_IO_SENDFILE
29: #else
30: ngx_writev_chain,
31: 0
32: #endif
33: };
34:
35:
36: typedef struct {
37: char *name;
38: void *value;
39: size_t size;
40: ngx_uint_t exists;
41: } sysctl_t;
42:
43:
44: sysctl_t sysctls[] = {
45: { "hw.ncpu",
46: &ngx_darwin_hw_ncpu,
47: sizeof(ngx_darwin_hw_ncpu), 0 },
48:
49: { "net.inet.tcp.sendspace",
50: &ngx_darwin_net_inet_tcp_sendspace,
51: sizeof(ngx_darwin_net_inet_tcp_sendspace), 0 },
52:
53: { "kern.ipc.somaxconn",
54: &ngx_darwin_kern_ipc_somaxconn,
55: sizeof(ngx_darwin_kern_ipc_somaxconn), 0 },
56:
57: { NULL, NULL, 0, 0 }
58: };
59:
60:
61: void
62: ngx_debug_init()
63: {
64: #if (NGX_DEBUG_MALLOC)
65:
66: /*
67: * MacOSX 10.6, 10.7: MallocScribble fills freed memory with 0x55
68: * and fills allocated memory with 0xAA.
69: * MacOSX 10.4, 10.5: MallocScribble fills freed memory with 0x55,
70: * MallocPreScribble fills allocated memory with 0xAA.
71: * MacOSX 10.3: MallocScribble fills freed memory with 0x55,
72: * and no way to fill allocated memory.
73: */
74:
75: setenv("MallocScribble", "1", 0);
76:
77: ngx_debug_malloc = 1;
78:
79: #else
80:
81: if (getenv("MallocScribble")) {
82: ngx_debug_malloc = 1;
83: }
84:
85: #endif
86: }
87:
88:
89: ngx_int_t
90: ngx_os_specific_init(ngx_log_t *log)
91: {
92: size_t size;
93: ngx_err_t err;
94: ngx_uint_t i;
95:
96: size = sizeof(ngx_darwin_kern_ostype);
97: if (sysctlbyname("kern.ostype", ngx_darwin_kern_ostype, &size, NULL, 0)
98: == -1)
99: {
100: err = ngx_errno;
101:
102: if (err != NGX_ENOENT) {
103:
104: ngx_log_error(NGX_LOG_ALERT, log, err,
105: "sysctlbyname(kern.ostype) failed");
106:
107: if (err != NGX_ENOMEM) {
108: return NGX_ERROR;
109: }
110:
111: ngx_darwin_kern_ostype[size - 1] = '\0';
112: }
113: }
114:
115: size = sizeof(ngx_darwin_kern_osrelease);
116: if (sysctlbyname("kern.osrelease", ngx_darwin_kern_osrelease, &size,
117: NULL, 0)
118: == -1)
119: {
120: err = ngx_errno;
121:
122: if (err != NGX_ENOENT) {
123:
124: ngx_log_error(NGX_LOG_ALERT, log, err,
125: "sysctlbyname(kern.osrelease) failed");
126:
127: if (err != NGX_ENOMEM) {
128: return NGX_ERROR;
129: }
130:
131: ngx_darwin_kern_osrelease[size - 1] = '\0';
132: }
133: }
134:
135: for (i = 0; sysctls[i].name; i++) {
136: size = sysctls[i].size;
137:
138: if (sysctlbyname(sysctls[i].name, sysctls[i].value, &size, NULL, 0)
139: == 0)
140: {
141: sysctls[i].exists = 1;
142: continue;
143: }
144:
145: err = ngx_errno;
146:
147: if (err == NGX_ENOENT) {
148: continue;
149: }
150:
151: ngx_log_error(NGX_LOG_ALERT, log, err,
152: "sysctlbyname(%s) failed", sysctls[i].name);
153: return NGX_ERROR;
154: }
155:
156: ngx_ncpu = ngx_darwin_hw_ncpu;
157:
158: if (ngx_darwin_kern_ipc_somaxconn > 32767) {
159: ngx_log_error(NGX_LOG_ALERT, log, 0,
160: "sysctl kern.ipc.somaxconn must be less than 32768");
161: return NGX_ERROR;
162: }
163:
164: ngx_tcp_nodelay_and_tcp_nopush = 1;
165:
166: ngx_os_io = ngx_darwin_io;
167:
168: return NGX_OK;
169: }
170:
171:
172: void
173: ngx_os_specific_status(ngx_log_t *log)
174: {
175: u_long value;
176: ngx_uint_t i;
177:
178: if (ngx_darwin_kern_ostype[0]) {
179: ngx_log_error(NGX_LOG_NOTICE, log, 0, "OS: %s %s",
180: ngx_darwin_kern_ostype, ngx_darwin_kern_osrelease);
181: }
182:
183: for (i = 0; sysctls[i].name; i++) {
184: if (sysctls[i].exists) {
185: if (sysctls[i].size == sizeof(long)) {
186: value = *(long *) sysctls[i].value;
187:
188: } else {
189: value = *(int *) sysctls[i].value;
190: }
191:
192: ngx_log_error(NGX_LOG_NOTICE, log, 0, "%s: %l",
193: sysctls[i].name, value);
194: }
195: }
196: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>