Groonga 3.0.9 Source Code Document
Main Page
Related Pages
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
groonga
vendor
nginx-1.4.2
src
os
unix
ngx_darwin_init.c
Go to the documentation of this file.
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
}
Generated on Sun Nov 10 2013 09:49:09 for Groonga 3.0.9 Source Code Document by
1.8.1.2