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
event
modules
ngx_aio_module.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
#include <
ngx_event.h
>
11
12
13
extern
ngx_event_module_t
ngx_kqueue_module_ctx
;
14
15
16
static
ngx_int_t
ngx_aio_init(
ngx_cycle_t
*cycle,
ngx_msec_t
timer);
17
static
void
ngx_aio_done(
ngx_cycle_t
*cycle);
18
static
ngx_int_t
ngx_aio_add_event(
ngx_event_t
*ev,
ngx_int_t
event,
19
ngx_uint_t
flags);
20
static
ngx_int_t
ngx_aio_del_event(
ngx_event_t
*ev,
ngx_int_t
event,
21
ngx_uint_t
flags);
22
static
ngx_int_t
ngx_aio_del_connection(
ngx_connection_t
*c,
ngx_uint_t
flags);
23
static
ngx_int_t
ngx_aio_process_events(
ngx_cycle_t
*cycle,
ngx_msec_t
timer,
24
ngx_uint_t
flags);
25
26
27
ngx_os_io_t
ngx_os_aio
= {
28
ngx_aio_read
,
29
ngx_aio_read_chain
,
30
NULL,
31
ngx_aio_write
,
32
ngx_aio_write_chain
,
33
0
34
};
35
36
37
static
ngx_str_t
aio_name =
ngx_string
(
"aio"
);
38
39
ngx_event_module_t
ngx_aio_module_ctx
= {
40
&aio_name,
41
NULL,
/* create configuration */
42
NULL,
/* init configuration */
43
44
{
45
ngx_aio_add_event,
/* add an event */
46
ngx_aio_del_event,
/* delete an event */
47
NULL,
/* enable an event */
48
NULL,
/* disable an event */
49
NULL,
/* add an connection */
50
ngx_aio_del_connection,
/* delete an connection */
51
NULL,
/* process the changes */
52
ngx_aio_process_events,
/* process the events */
53
ngx_aio_init,
/* init the events */
54
ngx_aio_done
/* done the events */
55
}
56
57
};
58
59
ngx_module_t
ngx_aio_module
= {
60
NGX_MODULE_V1
,
61
&
ngx_aio_module_ctx
,
/* module context */
62
NULL,
/* module directives */
63
NGX_EVENT_MODULE
,
/* module type */
64
NULL,
/* init master */
65
NULL,
/* init module */
66
NULL,
/* init process */
67
NULL,
/* init thread */
68
NULL,
/* exit thread */
69
NULL,
/* exit process */
70
NULL,
/* exit master */
71
NGX_MODULE_V1_PADDING
72
};
73
74
75
#if (NGX_HAVE_KQUEUE)
76
77
static
ngx_int_t
78
ngx_aio_init(
ngx_cycle_t
*cycle,
ngx_msec_t
timer)
79
{
80
if
(ngx_kqueue_module_ctx.
actions
.
init
(cycle, timer) ==
NGX_ERROR
) {
81
return
NGX_ERROR
;
82
}
83
84
ngx_io
=
ngx_os_aio
;
85
86
ngx_event_flags
=
NGX_USE_AIO_EVENT
;
87
ngx_event_actions
= ngx_aio_module_ctx.
actions
;
88
89
90
return
NGX_OK
;
91
}
92
93
94
static
void
95
ngx_aio_done(
ngx_cycle_t
*cycle)
96
{
97
ngx_kqueue_module_ctx.
actions
.
done
(cycle);
98
}
99
100
101
/* the event adding and deleting are needed for the listening sockets */
102
103
static
ngx_int_t
104
ngx_aio_add_event(
ngx_event_t
*ev,
ngx_int_t
event,
ngx_uint_t
flags)
105
{
106
return
ngx_kqueue_module_ctx.
actions
.
add
(ev, event, flags);
107
}
108
109
110
static
ngx_int_t
111
ngx_aio_del_event(
ngx_event_t
*ev,
ngx_int_t
event,
ngx_uint_t
flags)
112
{
113
return
ngx_kqueue_module_ctx.
actions
.
del
(ev, event, flags);
114
}
115
116
117
static
ngx_int_t
118
ngx_aio_del_connection(
ngx_connection_t
*c,
ngx_uint_t
flags)
119
{
120
int
rc;
121
122
if
(c->
read
->
active
== 0 && c->
write
->
active
== 0) {
123
return
NGX_OK
;
124
}
125
126
if
(flags &
NGX_CLOSE_EVENT
) {
127
return
NGX_OK
;
128
}
129
130
rc = aio_cancel(c->
fd
, NULL);
131
132
ngx_log_debug1
(
NGX_LOG_DEBUG_EVENT
, c->
log
, 0,
"aio_cancel: %d"
, rc);
133
134
if
(rc == AIO_CANCELED) {
135
c->
read
->
active
= 0;
136
c->
write
->
active
= 0;
137
return
NGX_OK
;
138
}
139
140
if
(rc == AIO_ALLDONE) {
141
c->
read
->
active
= 0;
142
c->
write
->
active
= 0;
143
ngx_log_error
(
NGX_LOG_ALERT
, c->
log
, 0,
144
"aio_cancel() returned AIO_ALLDONE"
);
145
return
NGX_OK
;
146
}
147
148
if
(rc == -1) {
149
ngx_log_error
(
NGX_LOG_ALERT
, c->
log
,
ngx_errno
,
150
"aio_cancel() failed"
);
151
return
NGX_ERROR
;
152
}
153
154
if
(rc == AIO_NOTCANCELED) {
155
ngx_log_error
(
NGX_LOG_ALERT
, c->
log
, 0,
156
"aio_cancel() returned AIO_NOTCANCELED"
);
157
158
return
NGX_ERROR
;
159
}
160
161
return
NGX_OK
;
162
}
163
164
165
static
ngx_int_t
166
ngx_aio_process_events(
ngx_cycle_t
*cycle,
ngx_msec_t
timer,
ngx_uint_t
flags)
167
{
168
return
ngx_kqueue_module_ctx.
actions
.
process_events
(cycle, timer, flags);
169
}
170
171
#endif
/* NGX_HAVE_KQUEUE */
Generated on Sun Nov 10 2013 09:49:07 for Groonga 3.0.9 Source Code Document by
1.8.1.2