ebb 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +119 -0
- data/VERSION +1 -0
- data/benchmark/application.rb +84 -0
- data/benchmark/bench_results.rb +45 -0
- data/benchmark/server_test.rb +152 -0
- data/benchmark/test.rb +141 -0
- data/bin/ebb_rails +88 -0
- data/libev/ev.c +2440 -0
- data/libev/ev.h +551 -0
- data/libev/ev_epoll.c +174 -0
- data/libev/ev_kqueue.c +186 -0
- data/libev/ev_poll.c +127 -0
- data/libev/ev_port.c +155 -0
- data/libev/ev_select.c +236 -0
- data/libev/ev_vars.h +108 -0
- data/libev/ev_win32.c +117 -0
- data/libev/ev_wrap.h +132 -0
- data/ruby_lib/daemonizable.rb +134 -0
- data/ruby_lib/ebb.rb +179 -0
- data/ruby_lib/rack/adapter/rails.rb +152 -0
- data/src/ebb.c +709 -0
- data/src/ebb.h +102 -0
- data/src/ebb_ruby.c +256 -0
- data/src/extconf.rb +44 -0
- data/src/parser.c +1584 -0
- data/src/parser.h +50 -0
- metadata +80 -0
data/libev/ev_port.c
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
/*
|
2
|
+
* libev solaris event port backend
|
3
|
+
*
|
4
|
+
* Copyright (c) 2007 Marc Alexander Lehmann <libev@schmorp.de>
|
5
|
+
* All rights reserved.
|
6
|
+
*
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
8
|
+
* modification, are permitted provided that the following conditions are
|
9
|
+
* met:
|
10
|
+
*
|
11
|
+
* * Redistributions of source code must retain the above copyright
|
12
|
+
* notice, this list of conditions and the following disclaimer.
|
13
|
+
*
|
14
|
+
* * Redistributions in binary form must reproduce the above
|
15
|
+
* copyright notice, this list of conditions and the following
|
16
|
+
* disclaimer in the documentation and/or other materials provided
|
17
|
+
* with the distribution.
|
18
|
+
*
|
19
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
20
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
21
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
22
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
23
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
24
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
25
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
26
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
27
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
28
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
*/
|
31
|
+
|
32
|
+
#include <sys/types.h>
|
33
|
+
#include <sys/time.h>
|
34
|
+
#include <poll.h>
|
35
|
+
#include <port.h>
|
36
|
+
#include <string.h>
|
37
|
+
#include <errno.h>
|
38
|
+
|
39
|
+
void inline_speed
|
40
|
+
port_associate_and_check (EV_P_ int fd, int ev)
|
41
|
+
{
|
42
|
+
if (0 >
|
43
|
+
port_associate (
|
44
|
+
backend_fd, PORT_SOURCE_FD, fd,
|
45
|
+
(ev & EV_READ ? POLLIN : 0)
|
46
|
+
| (ev & EV_WRITE ? POLLOUT : 0),
|
47
|
+
0
|
48
|
+
)
|
49
|
+
)
|
50
|
+
{
|
51
|
+
if (errno == EBADFD)
|
52
|
+
fd_kill (EV_A_ fd);
|
53
|
+
else
|
54
|
+
syserr ("(libev) port_associate");
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
static void
|
59
|
+
port_modify (EV_P_ int fd, int oev, int nev)
|
60
|
+
{
|
61
|
+
/* we need to reassociate no matter what, as closes are
|
62
|
+
* once more silently being discarded.
|
63
|
+
*/
|
64
|
+
if (!nev)
|
65
|
+
{
|
66
|
+
if (oev)
|
67
|
+
port_dissociate (backend_fd, PORT_SOURCE_FD, fd);
|
68
|
+
}
|
69
|
+
else
|
70
|
+
port_associate_and_check (EV_A_ fd, nev);
|
71
|
+
}
|
72
|
+
|
73
|
+
static void
|
74
|
+
port_poll (EV_P_ ev_tstamp timeout)
|
75
|
+
{
|
76
|
+
int res, i;
|
77
|
+
struct timespec ts;
|
78
|
+
uint_t nget = 1;
|
79
|
+
|
80
|
+
ts.tv_sec = (time_t)timeout;
|
81
|
+
ts.tv_nsec = (long)(timeout - (ev_tstamp)ts.tv_sec) * 1e9;
|
82
|
+
res = port_getn (backend_fd, port_events, port_eventmax, &nget, &ts);
|
83
|
+
|
84
|
+
if (res < 0)
|
85
|
+
{
|
86
|
+
if (errno != EINTR && errno != ETIME)
|
87
|
+
syserr ("(libev) port_getn");
|
88
|
+
|
89
|
+
return;
|
90
|
+
}
|
91
|
+
|
92
|
+
for (i = 0; i < nget; ++i)
|
93
|
+
{
|
94
|
+
if (port_events [i].portev_source == PORT_SOURCE_FD)
|
95
|
+
{
|
96
|
+
int fd = port_events [i].portev_object;
|
97
|
+
|
98
|
+
fd_event (
|
99
|
+
EV_A_
|
100
|
+
fd,
|
101
|
+
(port_events [i].portev_events & (POLLOUT | POLLERR | POLLHUP) ? EV_WRITE : 0)
|
102
|
+
| (port_events [i].portev_events & (POLLIN | POLLERR | POLLHUP) ? EV_READ : 0)
|
103
|
+
);
|
104
|
+
|
105
|
+
port_associate_and_check (EV_A_ fd, anfds [fd].events);
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
if (expect_false (nget == port_eventmax))
|
110
|
+
{
|
111
|
+
ev_free (port_events);
|
112
|
+
port_eventmax = array_nextsize (sizeof (port_event_t), port_eventmax, port_eventmax + 1);
|
113
|
+
port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax);
|
114
|
+
}
|
115
|
+
}
|
116
|
+
|
117
|
+
int inline_size
|
118
|
+
port_init (EV_P_ int flags)
|
119
|
+
{
|
120
|
+
/* Initalize the kernel queue */
|
121
|
+
if ((backend_fd = port_create ()) < 0)
|
122
|
+
return 0;
|
123
|
+
|
124
|
+
fcntl (backend_fd, F_SETFD, FD_CLOEXEC); /* not sure if necessary, hopefully doesn't hurt */
|
125
|
+
|
126
|
+
backend_fudge = 1e-3; /* needed to compensate for port_getn returning early */
|
127
|
+
backend_modify = port_modify;
|
128
|
+
backend_poll = port_poll;
|
129
|
+
|
130
|
+
port_eventmax = 64; /* intiial number of events receivable per poll */
|
131
|
+
port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax);
|
132
|
+
|
133
|
+
return EVBACKEND_PORT;
|
134
|
+
}
|
135
|
+
|
136
|
+
void inline_size
|
137
|
+
port_destroy (EV_P)
|
138
|
+
{
|
139
|
+
ev_free (port_events);
|
140
|
+
}
|
141
|
+
|
142
|
+
void inline_size
|
143
|
+
port_fork (EV_P)
|
144
|
+
{
|
145
|
+
close (backend_fd);
|
146
|
+
|
147
|
+
while ((backend_fd = port_create ()) < 0)
|
148
|
+
syserr ("(libev) port");
|
149
|
+
|
150
|
+
fcntl (backend_fd, F_SETFD, FD_CLOEXEC);
|
151
|
+
|
152
|
+
/* re-register interest in fds */
|
153
|
+
fd_rearm_all (EV_A);
|
154
|
+
}
|
155
|
+
|
data/libev/ev_select.c
ADDED
@@ -0,0 +1,236 @@
|
|
1
|
+
/*
|
2
|
+
* libev select fd activity backend
|
3
|
+
*
|
4
|
+
* Copyright (c) 2007 Marc Alexander Lehmann <libev@schmorp.de>
|
5
|
+
* All rights reserved.
|
6
|
+
*
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
8
|
+
* modification, are permitted provided that the following conditions are
|
9
|
+
* met:
|
10
|
+
*
|
11
|
+
* * Redistributions of source code must retain the above copyright
|
12
|
+
* notice, this list of conditions and the following disclaimer.
|
13
|
+
*
|
14
|
+
* * Redistributions in binary form must reproduce the above
|
15
|
+
* copyright notice, this list of conditions and the following
|
16
|
+
* disclaimer in the documentation and/or other materials provided
|
17
|
+
* with the distribution.
|
18
|
+
*
|
19
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
20
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
21
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
22
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
23
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
24
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
25
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
26
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
27
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
28
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
*/
|
31
|
+
|
32
|
+
#ifndef _WIN32
|
33
|
+
/* for unix systems */
|
34
|
+
# include <sys/select.h>
|
35
|
+
# include <inttypes.h>
|
36
|
+
#endif
|
37
|
+
|
38
|
+
#ifndef EV_SELECT_USE_FD_SET
|
39
|
+
# ifdef NFDBITS
|
40
|
+
# define EV_SELECT_USE_FD_SET 0
|
41
|
+
# else
|
42
|
+
# define EV_SELECT_USE_FD_SET 1
|
43
|
+
# endif
|
44
|
+
#endif
|
45
|
+
|
46
|
+
#if EV_SELECT_IS_WINSOCKET
|
47
|
+
# undef EV_SELECT_USE_FD_SET
|
48
|
+
# define EV_SELECT_USE_FD_SET 1
|
49
|
+
# undef EINTR
|
50
|
+
# define EINTR WSAEINTR
|
51
|
+
# undef EBADF
|
52
|
+
# define EBADF WSAENOTSOCK
|
53
|
+
# undef ENOMEM
|
54
|
+
# define ENOMEM (errno + 1)
|
55
|
+
#endif
|
56
|
+
|
57
|
+
#if !EV_SELECT_USE_FD_SET
|
58
|
+
# define NFDBYTES (NFDBITS / 8)
|
59
|
+
#endif
|
60
|
+
|
61
|
+
#include <string.h>
|
62
|
+
|
63
|
+
static void
|
64
|
+
select_modify (EV_P_ int fd, int oev, int nev)
|
65
|
+
{
|
66
|
+
if (oev == nev)
|
67
|
+
return;
|
68
|
+
|
69
|
+
{
|
70
|
+
#if EV_SELECT_USE_FD_SET
|
71
|
+
|
72
|
+
#if EV_SELECT_IS_WINSOCKET
|
73
|
+
SOCKET handle = anfds [fd].handle;
|
74
|
+
#else
|
75
|
+
int handle = fd;
|
76
|
+
#endif
|
77
|
+
|
78
|
+
if (nev & EV_READ)
|
79
|
+
FD_SET (handle, (fd_set *)vec_ri);
|
80
|
+
else
|
81
|
+
FD_CLR (handle, (fd_set *)vec_ri);
|
82
|
+
|
83
|
+
if (nev & EV_WRITE)
|
84
|
+
FD_SET (handle, (fd_set *)vec_wi);
|
85
|
+
else
|
86
|
+
FD_CLR (handle, (fd_set *)vec_wi);
|
87
|
+
|
88
|
+
#else
|
89
|
+
|
90
|
+
int word = fd / NFDBITS;
|
91
|
+
int mask = 1UL << (fd % NFDBITS);
|
92
|
+
|
93
|
+
if (expect_false (vec_max < word + 1))
|
94
|
+
{
|
95
|
+
int new_max = word + 1;
|
96
|
+
|
97
|
+
vec_ri = ev_realloc (vec_ri, new_max * NFDBYTES);
|
98
|
+
vec_ro = ev_realloc (vec_ro, new_max * NFDBYTES); /* could free/malloc */
|
99
|
+
vec_wi = ev_realloc (vec_wi, new_max * NFDBYTES);
|
100
|
+
vec_wo = ev_realloc (vec_wo, new_max * NFDBYTES); /* could free/malloc */
|
101
|
+
|
102
|
+
for (; vec_max < new_max; ++vec_max)
|
103
|
+
((fd_mask *)vec_ri)[vec_max] =
|
104
|
+
((fd_mask *)vec_wi)[vec_max] = 0;
|
105
|
+
}
|
106
|
+
|
107
|
+
((fd_mask *)vec_ri) [word] |= mask;
|
108
|
+
if (!(nev & EV_READ))
|
109
|
+
((fd_mask *)vec_ri) [word] &= ~mask;
|
110
|
+
|
111
|
+
((fd_mask *)vec_wi) [word] |= mask;
|
112
|
+
if (!(nev & EV_WRITE))
|
113
|
+
((fd_mask *)vec_wi) [word] &= ~mask;
|
114
|
+
#endif
|
115
|
+
}
|
116
|
+
}
|
117
|
+
|
118
|
+
static void
|
119
|
+
select_poll (EV_P_ ev_tstamp timeout)
|
120
|
+
{
|
121
|
+
struct timeval tv;
|
122
|
+
int res;
|
123
|
+
|
124
|
+
#if EV_SELECT_USE_FD_SET
|
125
|
+
memcpy (vec_ro, vec_ri, sizeof (fd_set));
|
126
|
+
memcpy (vec_wo, vec_wi, sizeof (fd_set));
|
127
|
+
#else
|
128
|
+
memcpy (vec_ro, vec_ri, vec_max * NFDBYTES);
|
129
|
+
memcpy (vec_wo, vec_wi, vec_max * NFDBYTES);
|
130
|
+
#endif
|
131
|
+
|
132
|
+
tv.tv_sec = (long)timeout;
|
133
|
+
tv.tv_usec = (long)((timeout - (ev_tstamp)tv.tv_sec) * 1e6);
|
134
|
+
|
135
|
+
res = select (vec_max * NFDBITS, (fd_set *)vec_ro, (fd_set *)vec_wo, 0, &tv);
|
136
|
+
|
137
|
+
if (expect_false (res < 0))
|
138
|
+
{
|
139
|
+
#if EV_SELECT_IS_WINSOCKET
|
140
|
+
errno = WSAGetLastError ();
|
141
|
+
#endif
|
142
|
+
|
143
|
+
if (errno == EBADF)
|
144
|
+
fd_ebadf (EV_A);
|
145
|
+
else if (errno == ENOMEM && !syserr_cb)
|
146
|
+
fd_enomem (EV_A);
|
147
|
+
else if (errno != EINTR)
|
148
|
+
syserr ("(libev) select");
|
149
|
+
|
150
|
+
return;
|
151
|
+
}
|
152
|
+
|
153
|
+
#if EV_SELECT_USE_FD_SET
|
154
|
+
|
155
|
+
{
|
156
|
+
int fd;
|
157
|
+
|
158
|
+
for (fd = 0; fd < anfdmax; ++fd)
|
159
|
+
if (anfds [fd].events)
|
160
|
+
{
|
161
|
+
int events = 0;
|
162
|
+
#if EV_SELECT_IS_WINSOCKET
|
163
|
+
SOCKET handle = anfds [fd].handle;
|
164
|
+
#else
|
165
|
+
int handle = fd;
|
166
|
+
#endif
|
167
|
+
|
168
|
+
if (FD_ISSET (handle, (fd_set *)vec_ro)) events |= EV_READ;
|
169
|
+
if (FD_ISSET (handle, (fd_set *)vec_wo)) events |= EV_WRITE;
|
170
|
+
|
171
|
+
if (expect_true (events))
|
172
|
+
fd_event (EV_A_ fd, events);
|
173
|
+
}
|
174
|
+
}
|
175
|
+
|
176
|
+
#else
|
177
|
+
|
178
|
+
{
|
179
|
+
int word, bit;
|
180
|
+
for (word = vec_max; word--; )
|
181
|
+
{
|
182
|
+
fd_mask word_r = ((fd_mask *)vec_ro) [word];
|
183
|
+
fd_mask word_w = ((fd_mask *)vec_wo) [word];
|
184
|
+
|
185
|
+
if (word_r || word_w)
|
186
|
+
for (bit = NFDBITS; bit--; )
|
187
|
+
{
|
188
|
+
fd_mask mask = 1UL << bit;
|
189
|
+
int events = 0;
|
190
|
+
|
191
|
+
events |= word_r & mask ? EV_READ : 0;
|
192
|
+
events |= word_w & mask ? EV_WRITE : 0;
|
193
|
+
|
194
|
+
if (expect_true (events))
|
195
|
+
fd_event (EV_A_ word * NFDBITS + bit, events);
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}
|
199
|
+
|
200
|
+
#endif
|
201
|
+
}
|
202
|
+
|
203
|
+
int inline_size
|
204
|
+
select_init (EV_P_ int flags)
|
205
|
+
{
|
206
|
+
backend_fudge = 0.; /* posix says this is zero */
|
207
|
+
backend_modify = select_modify;
|
208
|
+
backend_poll = select_poll;
|
209
|
+
|
210
|
+
#if EV_SELECT_USE_FD_SET
|
211
|
+
vec_max = FD_SETSIZE / 32;
|
212
|
+
vec_ri = ev_malloc (sizeof (fd_set)); FD_ZERO ((fd_set *)vec_ri);
|
213
|
+
vec_ro = ev_malloc (sizeof (fd_set));
|
214
|
+
vec_wi = ev_malloc (sizeof (fd_set)); FD_ZERO ((fd_set *)vec_wi);
|
215
|
+
vec_wo = ev_malloc (sizeof (fd_set));
|
216
|
+
#else
|
217
|
+
vec_max = 0;
|
218
|
+
vec_ri = 0;
|
219
|
+
vec_ri = 0;
|
220
|
+
vec_wo = 0;
|
221
|
+
vec_wo = 0;
|
222
|
+
#endif
|
223
|
+
|
224
|
+
return EVBACKEND_SELECT;
|
225
|
+
}
|
226
|
+
|
227
|
+
void inline_size
|
228
|
+
select_destroy (EV_P)
|
229
|
+
{
|
230
|
+
ev_free (vec_ri);
|
231
|
+
ev_free (vec_ro);
|
232
|
+
ev_free (vec_wi);
|
233
|
+
ev_free (vec_wo);
|
234
|
+
}
|
235
|
+
|
236
|
+
|
data/libev/ev_vars.h
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
#define VARx(type,name) VAR(name, type name)
|
2
|
+
|
3
|
+
VARx(ev_tstamp, now_floor) /* last time we refreshed rt_time */
|
4
|
+
VARx(ev_tstamp, mn_now) /* monotonic clock "now" */
|
5
|
+
VARx(ev_tstamp, rtmn_diff) /* difference realtime - monotonic time */
|
6
|
+
|
7
|
+
VARx(ev_tstamp, io_blocktime)
|
8
|
+
VARx(ev_tstamp, timeout_blocktime)
|
9
|
+
|
10
|
+
VARx(int, backend)
|
11
|
+
VARx(int, activecnt) /* total number of active events ("refcount") */
|
12
|
+
VARx(unsigned int, loop_count) /* total number of loop iterations/blocks */
|
13
|
+
|
14
|
+
VARx(int, backend_fd)
|
15
|
+
VARx(ev_tstamp, backend_fudge) /* assumed typical timer resolution */
|
16
|
+
VAR (backend_modify, void (*backend_modify)(EV_P_ int fd, int oev, int nev))
|
17
|
+
VAR (backend_poll , void (*backend_poll)(EV_P_ ev_tstamp timeout))
|
18
|
+
|
19
|
+
#if !defined(_WIN32) || EV_GENWRAP
|
20
|
+
VARx(pid_t, curpid)
|
21
|
+
#endif
|
22
|
+
|
23
|
+
VARx(int, postfork) /* true if we need to recreate kernel state after fork */
|
24
|
+
|
25
|
+
#if EV_USE_SELECT || EV_GENWRAP
|
26
|
+
VARx(void *, vec_ri)
|
27
|
+
VARx(void *, vec_ro)
|
28
|
+
VARx(void *, vec_wi)
|
29
|
+
VARx(void *, vec_wo)
|
30
|
+
VARx(int, vec_max)
|
31
|
+
#endif
|
32
|
+
|
33
|
+
#if EV_USE_POLL || EV_GENWRAP
|
34
|
+
VARx(struct pollfd *, polls)
|
35
|
+
VARx(int, pollmax)
|
36
|
+
VARx(int, pollcnt)
|
37
|
+
VARx(int *, pollidxs) /* maps fds into structure indices */
|
38
|
+
VARx(int, pollidxmax)
|
39
|
+
#endif
|
40
|
+
|
41
|
+
#if EV_USE_EPOLL || EV_GENWRAP
|
42
|
+
VARx(struct epoll_event *, epoll_events)
|
43
|
+
VARx(int, epoll_eventmax)
|
44
|
+
#endif
|
45
|
+
|
46
|
+
#if EV_USE_KQUEUE || EV_GENWRAP
|
47
|
+
VARx(struct kevent *, kqueue_changes)
|
48
|
+
VARx(int, kqueue_changemax)
|
49
|
+
VARx(int, kqueue_changecnt)
|
50
|
+
VARx(struct kevent *, kqueue_events)
|
51
|
+
VARx(int, kqueue_eventmax)
|
52
|
+
#endif
|
53
|
+
|
54
|
+
#if EV_USE_PORT || EV_GENWRAP
|
55
|
+
VARx(struct port_event *, port_events)
|
56
|
+
VARx(int, port_eventmax)
|
57
|
+
#endif
|
58
|
+
|
59
|
+
VARx(ANFD *, anfds)
|
60
|
+
VARx(int, anfdmax)
|
61
|
+
|
62
|
+
VAR (pendings, ANPENDING *pendings [NUMPRI])
|
63
|
+
VAR (pendingmax, int pendingmax [NUMPRI])
|
64
|
+
VAR (pendingcnt, int pendingcnt [NUMPRI])
|
65
|
+
|
66
|
+
VARx(int *, fdchanges)
|
67
|
+
VARx(int, fdchangemax)
|
68
|
+
VARx(int, fdchangecnt)
|
69
|
+
|
70
|
+
VARx(WT *, timers)
|
71
|
+
VARx(int, timermax)
|
72
|
+
VARx(int, timercnt)
|
73
|
+
|
74
|
+
#if EV_PERIODIC_ENABLE || EV_GENWRAP
|
75
|
+
VARx(WT *, periodics)
|
76
|
+
VARx(int, periodicmax)
|
77
|
+
VARx(int, periodiccnt)
|
78
|
+
#endif
|
79
|
+
|
80
|
+
#if EV_IDLE_ENABLE || EV_GENWRAP
|
81
|
+
VAR (idles, ev_idle **idles [NUMPRI])
|
82
|
+
VAR (idlemax, int idlemax [NUMPRI])
|
83
|
+
VAR (idlecnt, int idlecnt [NUMPRI])
|
84
|
+
#endif
|
85
|
+
VARx(int, idleall) /* total number */
|
86
|
+
|
87
|
+
VARx(struct ev_prepare **, prepares)
|
88
|
+
VARx(int, preparemax)
|
89
|
+
VARx(int, preparecnt)
|
90
|
+
|
91
|
+
VARx(struct ev_check **, checks)
|
92
|
+
VARx(int, checkmax)
|
93
|
+
VARx(int, checkcnt)
|
94
|
+
|
95
|
+
#if EV_FORK_ENABLE || EV_GENWRAP
|
96
|
+
VARx(struct ev_fork **, forks)
|
97
|
+
VARx(int, forkmax)
|
98
|
+
VARx(int, forkcnt)
|
99
|
+
#endif
|
100
|
+
|
101
|
+
#if EV_USE_INOTIFY || EV_GENWRAP
|
102
|
+
VARx(int, fs_fd)
|
103
|
+
VARx(ev_io, fs_w)
|
104
|
+
VAR (fs_hash, ANFS fs_hash [EV_INOTIFY_HASHSIZE])
|
105
|
+
#endif
|
106
|
+
|
107
|
+
#undef VARx
|
108
|
+
|