Coverage Report

Created: 2025-06-10 13:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/bitcoin/depends/work/build/x86_64-pc-linux-gnu/libevent/2.1.12-stable-7656baec08e/epolltable-internal.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
3
 * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 * 1. Redistributions of source code must retain the above copyright
9
 *    notice, this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright
11
 *    notice, this list of conditions and the following disclaimer in the
12
 *    documentation and/or other materials provided with the distribution.
13
 * 3. The name of the author may not be used to endorse or promote products
14
 *    derived from this software without specific prior written permission.
15
 *
16
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 */
27
#ifndef EPOLLTABLE_INTERNAL_H_INCLUDED_
28
#define EPOLLTABLE_INTERNAL_H_INCLUDED_
29
30
/*
31
  Here are the values we're masking off to decide what operations to do.
32
  Note that since EV_READ|EV_WRITE.
33
34
  Note also that this table is a little sparse, since ADD+DEL is
35
  nonsensical ("xxx" in the list below.)
36
37
  Note also that we are shifting old_events by only 5 bits, since
38
  EV_READ is 2 and EV_WRITE is 4.
39
40
  The table was auto-generated with a python script, according to this
41
  pseudocode:[*0]
42
43
      If either the read or the write change is add+del:
44
   This is impossible; Set op==-1, events=0.
45
      Else, if either the read or the write change is add:
46
   Set events to 0.
47
   If the read change is add, or
48
      (the read change is not del, and ev_read is in old_events):
49
         Add EPOLLIN to events.
50
   If the write change is add, or
51
      (the write change is not del, and ev_write is in old_events):
52
         Add EPOLLOUT to events.
53
54
   If old_events is set:
55
         Set op to EPOLL_CTL_MOD [*1,*2]
56
  Else:
57
         Set op to EPOLL_CTL_ADD [*3]
58
59
      Else, if the read or the write change is del:
60
   Set op to EPOLL_CTL_DEL.
61
   If the read change is del:
62
       If the write change is del:
63
     Set events to EPOLLIN|EPOLLOUT
64
       Else if ev_write is in old_events:
65
     Set events to EPOLLOUT
66
    Set op to EPOLL_CTL_MOD
67
       Else
68
     Set events to EPOLLIN
69
   Else:
70
       {The write change is del.}
71
      If ev_read is in old_events:
72
     Set events to EPOLLIN
73
    Set op to EPOLL_CTL_MOD
74
      Else:
75
    Set the events to EPOLLOUT
76
77
      Else:
78
     There is no read or write change; set op to 0 and events to 0.
79
80
      The logic is a little tricky, since we had no events set on the fd before,
81
      we need to set op="ADD" and set events=the events we want to add.  If we
82
      had any events set on the fd before, and we want any events to remain on
83
      the fd, we need to say op="MOD" and set events=the events we want to
84
      remain.  But if we want to delete the last event, we say op="DEL" and
85
      set events=(any non-null pointer).
86
87
  [*0] Actually, the Python script has gotten a bit more complicated, to
88
       support EPOLLRDHUP.
89
90
  [*1] This MOD is only a guess.  MOD might fail with ENOENT if the file was
91
       closed and a new file was opened with the same fd.  If so, we'll retry
92
       with ADD.
93
94
  [*2] We can't replace this with a no-op even if old_events is the same as
95
       the new events: if the file was closed and reopened, we need to retry
96
       with an ADD.  (We do a MOD in this case since "no change" is more
97
       common than "close and reopen", so we'll usually wind up doing 1
98
       syscalls instead of 2.)
99
100
  [*3] This ADD is only a guess.  There is a fun Linux kernel issue where if
101
       you have two fds for the same file (via dup) and you ADD one to an
102
       epfd, then close it, then re-create it with the same fd (via dup2 or an
103
       unlucky dup), then try to ADD it again, you'll get an EEXIST, since the
104
       struct epitem is not actually removed from the struct eventpoll until
105
       the file itself is closed.
106
107
  EV_CHANGE_ADD==1
108
  EV_CHANGE_DEL==2
109
  EV_READ      ==2
110
  EV_WRITE     ==4
111
  EV_CLOSED    ==0x80
112
113
  Bit 0: close change is add
114
  Bit 1: close change is del
115
  Bit 2: read change is add
116
  Bit 3: read change is del
117
  Bit 4: write change is add
118
  Bit 5: write change is del
119
  Bit 6: old events had EV_READ
120
  Bit 7: old events had EV_WRITE
121
  Bit 8: old events had EV_CLOSED
122
*/
123
124
#define EPOLL_OP_TABLE_INDEX(c) \
125
18.9M
  (   (((c)->close_change&(EV_CHANGE_ADD|EV_CHANGE_DEL))) |   \
126
18.9M
      (((c)->read_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 2) |  \
127
18.9M
      (((c)->write_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 4) |  \
128
18.9M
      (((c)->old_events&(EV_READ|EV_WRITE)) << 5) |    \
129
18.9M
      (((c)->old_events&(EV_CLOSED)) << 1)        \
130
18.9M
      )
131
132
#if EV_READ != 2 || EV_WRITE != 4 || EV_CLOSED != 0x80 || EV_CHANGE_ADD != 1 || EV_CHANGE_DEL != 2
133
#error "Libevent's internals changed!  Regenerate the op_table in epolltable-internal.h"
134
#endif
135
136
static const struct operation {
137
  int events;
138
  int op;
139
} epoll_op_table[] = {
140
  /* old=  0, write:  0, read:  0, close:  0 */
141
  { 0, 0 },
142
  /* old=  0, write:  0, read:  0, close:add */
143
  { EPOLLRDHUP, EPOLL_CTL_ADD },
144
  /* old=  0, write:  0, read:  0, close:del */
145
  { EPOLLRDHUP, EPOLL_CTL_DEL },
146
  /* old=  0, write:  0, read:  0, close:xxx */
147
  { 0, 255 },
148
  /* old=  0, write:  0, read:add, close:  0 */
149
  { EPOLLIN, EPOLL_CTL_ADD },
150
  /* old=  0, write:  0, read:add, close:add */
151
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
152
  /* old=  0, write:  0, read:add, close:del */
153
  { EPOLLIN, EPOLL_CTL_ADD },
154
  /* old=  0, write:  0, read:add, close:xxx */
155
  { 0, 255 },
156
  /* old=  0, write:  0, read:del, close:  0 */
157
  { EPOLLIN, EPOLL_CTL_DEL },
158
  /* old=  0, write:  0, read:del, close:add */
159
  { EPOLLRDHUP, EPOLL_CTL_ADD },
160
  /* old=  0, write:  0, read:del, close:del */
161
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
162
  /* old=  0, write:  0, read:del, close:xxx */
163
  { 0, 255 },
164
  /* old=  0, write:  0, read:xxx, close:  0 */
165
  { 0, 255 },
166
  /* old=  0, write:  0, read:xxx, close:add */
167
  { 0, 255 },
168
  /* old=  0, write:  0, read:xxx, close:del */
169
  { 0, 255 },
170
  /* old=  0, write:  0, read:xxx, close:xxx */
171
  { 0, 255 },
172
  /* old=  0, write:add, read:  0, close:  0 */
173
  { EPOLLOUT, EPOLL_CTL_ADD },
174
  /* old=  0, write:add, read:  0, close:add */
175
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
176
  /* old=  0, write:add, read:  0, close:del */
177
  { EPOLLOUT, EPOLL_CTL_ADD },
178
  /* old=  0, write:add, read:  0, close:xxx */
179
  { 0, 255 },
180
  /* old=  0, write:add, read:add, close:  0 */
181
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
182
  /* old=  0, write:add, read:add, close:add */
183
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
184
  /* old=  0, write:add, read:add, close:del */
185
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
186
  /* old=  0, write:add, read:add, close:xxx */
187
  { 0, 255 },
188
  /* old=  0, write:add, read:del, close:  0 */
189
  { EPOLLOUT, EPOLL_CTL_ADD },
190
  /* old=  0, write:add, read:del, close:add */
191
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
192
  /* old=  0, write:add, read:del, close:del */
193
  { EPOLLOUT, EPOLL_CTL_ADD },
194
  /* old=  0, write:add, read:del, close:xxx */
195
  { 0, 255 },
196
  /* old=  0, write:add, read:xxx, close:  0 */
197
  { 0, 255 },
198
  /* old=  0, write:add, read:xxx, close:add */
199
  { 0, 255 },
200
  /* old=  0, write:add, read:xxx, close:del */
201
  { 0, 255 },
202
  /* old=  0, write:add, read:xxx, close:xxx */
203
  { 0, 255 },
204
  /* old=  0, write:del, read:  0, close:  0 */
205
  { EPOLLOUT, EPOLL_CTL_DEL },
206
  /* old=  0, write:del, read:  0, close:add */
207
  { EPOLLRDHUP, EPOLL_CTL_ADD },
208
  /* old=  0, write:del, read:  0, close:del */
209
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
210
  /* old=  0, write:del, read:  0, close:xxx */
211
  { 0, 255 },
212
  /* old=  0, write:del, read:add, close:  0 */
213
  { EPOLLIN, EPOLL_CTL_ADD },
214
  /* old=  0, write:del, read:add, close:add */
215
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
216
  /* old=  0, write:del, read:add, close:del */
217
  { EPOLLIN, EPOLL_CTL_ADD },
218
  /* old=  0, write:del, read:add, close:xxx */
219
  { 0, 255 },
220
  /* old=  0, write:del, read:del, close:  0 */
221
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
222
  /* old=  0, write:del, read:del, close:add */
223
  { EPOLLRDHUP, EPOLL_CTL_ADD },
224
  /* old=  0, write:del, read:del, close:del */
225
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
226
  /* old=  0, write:del, read:del, close:xxx */
227
  { 0, 255 },
228
  /* old=  0, write:del, read:xxx, close:  0 */
229
  { 0, 255 },
230
  /* old=  0, write:del, read:xxx, close:add */
231
  { 0, 255 },
232
  /* old=  0, write:del, read:xxx, close:del */
233
  { 0, 255 },
234
  /* old=  0, write:del, read:xxx, close:xxx */
235
  { 0, 255 },
236
  /* old=  0, write:xxx, read:  0, close:  0 */
237
  { 0, 255 },
238
  /* old=  0, write:xxx, read:  0, close:add */
239
  { 0, 255 },
240
  /* old=  0, write:xxx, read:  0, close:del */
241
  { 0, 255 },
242
  /* old=  0, write:xxx, read:  0, close:xxx */
243
  { 0, 255 },
244
  /* old=  0, write:xxx, read:add, close:  0 */
245
  { 0, 255 },
246
  /* old=  0, write:xxx, read:add, close:add */
247
  { 0, 255 },
248
  /* old=  0, write:xxx, read:add, close:del */
249
  { 0, 255 },
250
  /* old=  0, write:xxx, read:add, close:xxx */
251
  { 0, 255 },
252
  /* old=  0, write:xxx, read:del, close:  0 */
253
  { 0, 255 },
254
  /* old=  0, write:xxx, read:del, close:add */
255
  { 0, 255 },
256
  /* old=  0, write:xxx, read:del, close:del */
257
  { 0, 255 },
258
  /* old=  0, write:xxx, read:del, close:xxx */
259
  { 0, 255 },
260
  /* old=  0, write:xxx, read:xxx, close:  0 */
261
  { 0, 255 },
262
  /* old=  0, write:xxx, read:xxx, close:add */
263
  { 0, 255 },
264
  /* old=  0, write:xxx, read:xxx, close:del */
265
  { 0, 255 },
266
  /* old=  0, write:xxx, read:xxx, close:xxx */
267
  { 0, 255 },
268
  /* old=  r, write:  0, read:  0, close:  0 */
269
  { 0, 0 },
270
  /* old=  r, write:  0, read:  0, close:add */
271
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
272
  /* old=  r, write:  0, read:  0, close:del */
273
  { EPOLLIN, EPOLL_CTL_MOD },
274
  /* old=  r, write:  0, read:  0, close:xxx */
275
  { 0, 255 },
276
  /* old=  r, write:  0, read:add, close:  0 */
277
  { EPOLLIN, EPOLL_CTL_MOD },
278
  /* old=  r, write:  0, read:add, close:add */
279
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
280
  /* old=  r, write:  0, read:add, close:del */
281
  { EPOLLIN, EPOLL_CTL_MOD },
282
  /* old=  r, write:  0, read:add, close:xxx */
283
  { 0, 255 },
284
  /* old=  r, write:  0, read:del, close:  0 */
285
  { EPOLLIN, EPOLL_CTL_DEL },
286
  /* old=  r, write:  0, read:del, close:add */
287
  { EPOLLRDHUP, EPOLL_CTL_MOD },
288
  /* old=  r, write:  0, read:del, close:del */
289
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
290
  /* old=  r, write:  0, read:del, close:xxx */
291
  { 0, 255 },
292
  /* old=  r, write:  0, read:xxx, close:  0 */
293
  { 0, 255 },
294
  /* old=  r, write:  0, read:xxx, close:add */
295
  { 0, 255 },
296
  /* old=  r, write:  0, read:xxx, close:del */
297
  { 0, 255 },
298
  /* old=  r, write:  0, read:xxx, close:xxx */
299
  { 0, 255 },
300
  /* old=  r, write:add, read:  0, close:  0 */
301
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
302
  /* old=  r, write:add, read:  0, close:add */
303
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
304
  /* old=  r, write:add, read:  0, close:del */
305
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
306
  /* old=  r, write:add, read:  0, close:xxx */
307
  { 0, 255 },
308
  /* old=  r, write:add, read:add, close:  0 */
309
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
310
  /* old=  r, write:add, read:add, close:add */
311
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
312
  /* old=  r, write:add, read:add, close:del */
313
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
314
  /* old=  r, write:add, read:add, close:xxx */
315
  { 0, 255 },
316
  /* old=  r, write:add, read:del, close:  0 */
317
  { EPOLLOUT, EPOLL_CTL_MOD },
318
  /* old=  r, write:add, read:del, close:add */
319
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
320
  /* old=  r, write:add, read:del, close:del */
321
  { EPOLLOUT, EPOLL_CTL_MOD },
322
  /* old=  r, write:add, read:del, close:xxx */
323
  { 0, 255 },
324
  /* old=  r, write:add, read:xxx, close:  0 */
325
  { 0, 255 },
326
  /* old=  r, write:add, read:xxx, close:add */
327
  { 0, 255 },
328
  /* old=  r, write:add, read:xxx, close:del */
329
  { 0, 255 },
330
  /* old=  r, write:add, read:xxx, close:xxx */
331
  { 0, 255 },
332
  /* old=  r, write:del, read:  0, close:  0 */
333
  { EPOLLIN, EPOLL_CTL_MOD },
334
  /* old=  r, write:del, read:  0, close:add */
335
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
336
  /* old=  r, write:del, read:  0, close:del */
337
  { EPOLLIN, EPOLL_CTL_MOD },
338
  /* old=  r, write:del, read:  0, close:xxx */
339
  { 0, 255 },
340
  /* old=  r, write:del, read:add, close:  0 */
341
  { EPOLLIN, EPOLL_CTL_MOD },
342
  /* old=  r, write:del, read:add, close:add */
343
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
344
  /* old=  r, write:del, read:add, close:del */
345
  { EPOLLIN, EPOLL_CTL_MOD },
346
  /* old=  r, write:del, read:add, close:xxx */
347
  { 0, 255 },
348
  /* old=  r, write:del, read:del, close:  0 */
349
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
350
  /* old=  r, write:del, read:del, close:add */
351
  { EPOLLRDHUP, EPOLL_CTL_MOD },
352
  /* old=  r, write:del, read:del, close:del */
353
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
354
  /* old=  r, write:del, read:del, close:xxx */
355
  { 0, 255 },
356
  /* old=  r, write:del, read:xxx, close:  0 */
357
  { 0, 255 },
358
  /* old=  r, write:del, read:xxx, close:add */
359
  { 0, 255 },
360
  /* old=  r, write:del, read:xxx, close:del */
361
  { 0, 255 },
362
  /* old=  r, write:del, read:xxx, close:xxx */
363
  { 0, 255 },
364
  /* old=  r, write:xxx, read:  0, close:  0 */
365
  { 0, 255 },
366
  /* old=  r, write:xxx, read:  0, close:add */
367
  { 0, 255 },
368
  /* old=  r, write:xxx, read:  0, close:del */
369
  { 0, 255 },
370
  /* old=  r, write:xxx, read:  0, close:xxx */
371
  { 0, 255 },
372
  /* old=  r, write:xxx, read:add, close:  0 */
373
  { 0, 255 },
374
  /* old=  r, write:xxx, read:add, close:add */
375
  { 0, 255 },
376
  /* old=  r, write:xxx, read:add, close:del */
377
  { 0, 255 },
378
  /* old=  r, write:xxx, read:add, close:xxx */
379
  { 0, 255 },
380
  /* old=  r, write:xxx, read:del, close:  0 */
381
  { 0, 255 },
382
  /* old=  r, write:xxx, read:del, close:add */
383
  { 0, 255 },
384
  /* old=  r, write:xxx, read:del, close:del */
385
  { 0, 255 },
386
  /* old=  r, write:xxx, read:del, close:xxx */
387
  { 0, 255 },
388
  /* old=  r, write:xxx, read:xxx, close:  0 */
389
  { 0, 255 },
390
  /* old=  r, write:xxx, read:xxx, close:add */
391
  { 0, 255 },
392
  /* old=  r, write:xxx, read:xxx, close:del */
393
  { 0, 255 },
394
  /* old=  r, write:xxx, read:xxx, close:xxx */
395
  { 0, 255 },
396
  /* old=  w, write:  0, read:  0, close:  0 */
397
  { 0, 0 },
398
  /* old=  w, write:  0, read:  0, close:add */
399
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
400
  /* old=  w, write:  0, read:  0, close:del */
401
  { EPOLLOUT, EPOLL_CTL_MOD },
402
  /* old=  w, write:  0, read:  0, close:xxx */
403
  { 0, 255 },
404
  /* old=  w, write:  0, read:add, close:  0 */
405
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
406
  /* old=  w, write:  0, read:add, close:add */
407
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
408
  /* old=  w, write:  0, read:add, close:del */
409
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
410
  /* old=  w, write:  0, read:add, close:xxx */
411
  { 0, 255 },
412
  /* old=  w, write:  0, read:del, close:  0 */
413
  { EPOLLOUT, EPOLL_CTL_MOD },
414
  /* old=  w, write:  0, read:del, close:add */
415
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
416
  /* old=  w, write:  0, read:del, close:del */
417
  { EPOLLOUT, EPOLL_CTL_MOD },
418
  /* old=  w, write:  0, read:del, close:xxx */
419
  { 0, 255 },
420
  /* old=  w, write:  0, read:xxx, close:  0 */
421
  { 0, 255 },
422
  /* old=  w, write:  0, read:xxx, close:add */
423
  { 0, 255 },
424
  /* old=  w, write:  0, read:xxx, close:del */
425
  { 0, 255 },
426
  /* old=  w, write:  0, read:xxx, close:xxx */
427
  { 0, 255 },
428
  /* old=  w, write:add, read:  0, close:  0 */
429
  { EPOLLOUT, EPOLL_CTL_MOD },
430
  /* old=  w, write:add, read:  0, close:add */
431
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
432
  /* old=  w, write:add, read:  0, close:del */
433
  { EPOLLOUT, EPOLL_CTL_MOD },
434
  /* old=  w, write:add, read:  0, close:xxx */
435
  { 0, 255 },
436
  /* old=  w, write:add, read:add, close:  0 */
437
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
438
  /* old=  w, write:add, read:add, close:add */
439
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
440
  /* old=  w, write:add, read:add, close:del */
441
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
442
  /* old=  w, write:add, read:add, close:xxx */
443
  { 0, 255 },
444
  /* old=  w, write:add, read:del, close:  0 */
445
  { EPOLLOUT, EPOLL_CTL_MOD },
446
  /* old=  w, write:add, read:del, close:add */
447
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
448
  /* old=  w, write:add, read:del, close:del */
449
  { EPOLLOUT, EPOLL_CTL_MOD },
450
  /* old=  w, write:add, read:del, close:xxx */
451
  { 0, 255 },
452
  /* old=  w, write:add, read:xxx, close:  0 */
453
  { 0, 255 },
454
  /* old=  w, write:add, read:xxx, close:add */
455
  { 0, 255 },
456
  /* old=  w, write:add, read:xxx, close:del */
457
  { 0, 255 },
458
  /* old=  w, write:add, read:xxx, close:xxx */
459
  { 0, 255 },
460
  /* old=  w, write:del, read:  0, close:  0 */
461
  { EPOLLOUT, EPOLL_CTL_DEL },
462
  /* old=  w, write:del, read:  0, close:add */
463
  { EPOLLRDHUP, EPOLL_CTL_MOD },
464
  /* old=  w, write:del, read:  0, close:del */
465
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
466
  /* old=  w, write:del, read:  0, close:xxx */
467
  { 0, 255 },
468
  /* old=  w, write:del, read:add, close:  0 */
469
  { EPOLLIN, EPOLL_CTL_MOD },
470
  /* old=  w, write:del, read:add, close:add */
471
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
472
  /* old=  w, write:del, read:add, close:del */
473
  { EPOLLIN, EPOLL_CTL_MOD },
474
  /* old=  w, write:del, read:add, close:xxx */
475
  { 0, 255 },
476
  /* old=  w, write:del, read:del, close:  0 */
477
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
478
  /* old=  w, write:del, read:del, close:add */
479
  { EPOLLRDHUP, EPOLL_CTL_MOD },
480
  /* old=  w, write:del, read:del, close:del */
481
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
482
  /* old=  w, write:del, read:del, close:xxx */
483
  { 0, 255 },
484
  /* old=  w, write:del, read:xxx, close:  0 */
485
  { 0, 255 },
486
  /* old=  w, write:del, read:xxx, close:add */
487
  { 0, 255 },
488
  /* old=  w, write:del, read:xxx, close:del */
489
  { 0, 255 },
490
  /* old=  w, write:del, read:xxx, close:xxx */
491
  { 0, 255 },
492
  /* old=  w, write:xxx, read:  0, close:  0 */
493
  { 0, 255 },
494
  /* old=  w, write:xxx, read:  0, close:add */
495
  { 0, 255 },
496
  /* old=  w, write:xxx, read:  0, close:del */
497
  { 0, 255 },
498
  /* old=  w, write:xxx, read:  0, close:xxx */
499
  { 0, 255 },
500
  /* old=  w, write:xxx, read:add, close:  0 */
501
  { 0, 255 },
502
  /* old=  w, write:xxx, read:add, close:add */
503
  { 0, 255 },
504
  /* old=  w, write:xxx, read:add, close:del */
505
  { 0, 255 },
506
  /* old=  w, write:xxx, read:add, close:xxx */
507
  { 0, 255 },
508
  /* old=  w, write:xxx, read:del, close:  0 */
509
  { 0, 255 },
510
  /* old=  w, write:xxx, read:del, close:add */
511
  { 0, 255 },
512
  /* old=  w, write:xxx, read:del, close:del */
513
  { 0, 255 },
514
  /* old=  w, write:xxx, read:del, close:xxx */
515
  { 0, 255 },
516
  /* old=  w, write:xxx, read:xxx, close:  0 */
517
  { 0, 255 },
518
  /* old=  w, write:xxx, read:xxx, close:add */
519
  { 0, 255 },
520
  /* old=  w, write:xxx, read:xxx, close:del */
521
  { 0, 255 },
522
  /* old=  w, write:xxx, read:xxx, close:xxx */
523
  { 0, 255 },
524
  /* old= rw, write:  0, read:  0, close:  0 */
525
  { 0, 0 },
526
  /* old= rw, write:  0, read:  0, close:add */
527
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
528
  /* old= rw, write:  0, read:  0, close:del */
529
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
530
  /* old= rw, write:  0, read:  0, close:xxx */
531
  { 0, 255 },
532
  /* old= rw, write:  0, read:add, close:  0 */
533
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
534
  /* old= rw, write:  0, read:add, close:add */
535
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
536
  /* old= rw, write:  0, read:add, close:del */
537
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
538
  /* old= rw, write:  0, read:add, close:xxx */
539
  { 0, 255 },
540
  /* old= rw, write:  0, read:del, close:  0 */
541
  { EPOLLOUT, EPOLL_CTL_MOD },
542
  /* old= rw, write:  0, read:del, close:add */
543
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
544
  /* old= rw, write:  0, read:del, close:del */
545
  { EPOLLOUT, EPOLL_CTL_MOD },
546
  /* old= rw, write:  0, read:del, close:xxx */
547
  { 0, 255 },
548
  /* old= rw, write:  0, read:xxx, close:  0 */
549
  { 0, 255 },
550
  /* old= rw, write:  0, read:xxx, close:add */
551
  { 0, 255 },
552
  /* old= rw, write:  0, read:xxx, close:del */
553
  { 0, 255 },
554
  /* old= rw, write:  0, read:xxx, close:xxx */
555
  { 0, 255 },
556
  /* old= rw, write:add, read:  0, close:  0 */
557
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
558
  /* old= rw, write:add, read:  0, close:add */
559
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
560
  /* old= rw, write:add, read:  0, close:del */
561
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
562
  /* old= rw, write:add, read:  0, close:xxx */
563
  { 0, 255 },
564
  /* old= rw, write:add, read:add, close:  0 */
565
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
566
  /* old= rw, write:add, read:add, close:add */
567
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
568
  /* old= rw, write:add, read:add, close:del */
569
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
570
  /* old= rw, write:add, read:add, close:xxx */
571
  { 0, 255 },
572
  /* old= rw, write:add, read:del, close:  0 */
573
  { EPOLLOUT, EPOLL_CTL_MOD },
574
  /* old= rw, write:add, read:del, close:add */
575
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
576
  /* old= rw, write:add, read:del, close:del */
577
  { EPOLLOUT, EPOLL_CTL_MOD },
578
  /* old= rw, write:add, read:del, close:xxx */
579
  { 0, 255 },
580
  /* old= rw, write:add, read:xxx, close:  0 */
581
  { 0, 255 },
582
  /* old= rw, write:add, read:xxx, close:add */
583
  { 0, 255 },
584
  /* old= rw, write:add, read:xxx, close:del */
585
  { 0, 255 },
586
  /* old= rw, write:add, read:xxx, close:xxx */
587
  { 0, 255 },
588
  /* old= rw, write:del, read:  0, close:  0 */
589
  { EPOLLIN, EPOLL_CTL_MOD },
590
  /* old= rw, write:del, read:  0, close:add */
591
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
592
  /* old= rw, write:del, read:  0, close:del */
593
  { EPOLLIN, EPOLL_CTL_MOD },
594
  /* old= rw, write:del, read:  0, close:xxx */
595
  { 0, 255 },
596
  /* old= rw, write:del, read:add, close:  0 */
597
  { EPOLLIN, EPOLL_CTL_MOD },
598
  /* old= rw, write:del, read:add, close:add */
599
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
600
  /* old= rw, write:del, read:add, close:del */
601
  { EPOLLIN, EPOLL_CTL_MOD },
602
  /* old= rw, write:del, read:add, close:xxx */
603
  { 0, 255 },
604
  /* old= rw, write:del, read:del, close:  0 */
605
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
606
  /* old= rw, write:del, read:del, close:add */
607
  { EPOLLRDHUP, EPOLL_CTL_MOD },
608
  /* old= rw, write:del, read:del, close:del */
609
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
610
  /* old= rw, write:del, read:del, close:xxx */
611
  { 0, 255 },
612
  /* old= rw, write:del, read:xxx, close:  0 */
613
  { 0, 255 },
614
  /* old= rw, write:del, read:xxx, close:add */
615
  { 0, 255 },
616
  /* old= rw, write:del, read:xxx, close:del */
617
  { 0, 255 },
618
  /* old= rw, write:del, read:xxx, close:xxx */
619
  { 0, 255 },
620
  /* old= rw, write:xxx, read:  0, close:  0 */
621
  { 0, 255 },
622
  /* old= rw, write:xxx, read:  0, close:add */
623
  { 0, 255 },
624
  /* old= rw, write:xxx, read:  0, close:del */
625
  { 0, 255 },
626
  /* old= rw, write:xxx, read:  0, close:xxx */
627
  { 0, 255 },
628
  /* old= rw, write:xxx, read:add, close:  0 */
629
  { 0, 255 },
630
  /* old= rw, write:xxx, read:add, close:add */
631
  { 0, 255 },
632
  /* old= rw, write:xxx, read:add, close:del */
633
  { 0, 255 },
634
  /* old= rw, write:xxx, read:add, close:xxx */
635
  { 0, 255 },
636
  /* old= rw, write:xxx, read:del, close:  0 */
637
  { 0, 255 },
638
  /* old= rw, write:xxx, read:del, close:add */
639
  { 0, 255 },
640
  /* old= rw, write:xxx, read:del, close:del */
641
  { 0, 255 },
642
  /* old= rw, write:xxx, read:del, close:xxx */
643
  { 0, 255 },
644
  /* old= rw, write:xxx, read:xxx, close:  0 */
645
  { 0, 255 },
646
  /* old= rw, write:xxx, read:xxx, close:add */
647
  { 0, 255 },
648
  /* old= rw, write:xxx, read:xxx, close:del */
649
  { 0, 255 },
650
  /* old= rw, write:xxx, read:xxx, close:xxx */
651
  { 0, 255 },
652
  /* old=  c, write:  0, read:  0, close:  0 */
653
  { 0, 0 },
654
  /* old=  c, write:  0, read:  0, close:add */
655
  { EPOLLRDHUP, EPOLL_CTL_MOD },
656
  /* old=  c, write:  0, read:  0, close:del */
657
  { EPOLLRDHUP, EPOLL_CTL_DEL },
658
  /* old=  c, write:  0, read:  0, close:xxx */
659
  { 0, 255 },
660
  /* old=  c, write:  0, read:add, close:  0 */
661
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
662
  /* old=  c, write:  0, read:add, close:add */
663
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
664
  /* old=  c, write:  0, read:add, close:del */
665
  { EPOLLIN, EPOLL_CTL_MOD },
666
  /* old=  c, write:  0, read:add, close:xxx */
667
  { 0, 255 },
668
  /* old=  c, write:  0, read:del, close:  0 */
669
  { EPOLLRDHUP, EPOLL_CTL_MOD },
670
  /* old=  c, write:  0, read:del, close:add */
671
  { EPOLLRDHUP, EPOLL_CTL_MOD },
672
  /* old=  c, write:  0, read:del, close:del */
673
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
674
  /* old=  c, write:  0, read:del, close:xxx */
675
  { 0, 255 },
676
  /* old=  c, write:  0, read:xxx, close:  0 */
677
  { 0, 255 },
678
  /* old=  c, write:  0, read:xxx, close:add */
679
  { 0, 255 },
680
  /* old=  c, write:  0, read:xxx, close:del */
681
  { 0, 255 },
682
  /* old=  c, write:  0, read:xxx, close:xxx */
683
  { 0, 255 },
684
  /* old=  c, write:add, read:  0, close:  0 */
685
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
686
  /* old=  c, write:add, read:  0, close:add */
687
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
688
  /* old=  c, write:add, read:  0, close:del */
689
  { EPOLLOUT, EPOLL_CTL_MOD },
690
  /* old=  c, write:add, read:  0, close:xxx */
691
  { 0, 255 },
692
  /* old=  c, write:add, read:add, close:  0 */
693
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
694
  /* old=  c, write:add, read:add, close:add */
695
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
696
  /* old=  c, write:add, read:add, close:del */
697
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
698
  /* old=  c, write:add, read:add, close:xxx */
699
  { 0, 255 },
700
  /* old=  c, write:add, read:del, close:  0 */
701
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
702
  /* old=  c, write:add, read:del, close:add */
703
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
704
  /* old=  c, write:add, read:del, close:del */
705
  { EPOLLOUT, EPOLL_CTL_MOD },
706
  /* old=  c, write:add, read:del, close:xxx */
707
  { 0, 255 },
708
  /* old=  c, write:add, read:xxx, close:  0 */
709
  { 0, 255 },
710
  /* old=  c, write:add, read:xxx, close:add */
711
  { 0, 255 },
712
  /* old=  c, write:add, read:xxx, close:del */
713
  { 0, 255 },
714
  /* old=  c, write:add, read:xxx, close:xxx */
715
  { 0, 255 },
716
  /* old=  c, write:del, read:  0, close:  0 */
717
  { EPOLLRDHUP, EPOLL_CTL_MOD },
718
  /* old=  c, write:del, read:  0, close:add */
719
  { EPOLLRDHUP, EPOLL_CTL_MOD },
720
  /* old=  c, write:del, read:  0, close:del */
721
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
722
  /* old=  c, write:del, read:  0, close:xxx */
723
  { 0, 255 },
724
  /* old=  c, write:del, read:add, close:  0 */
725
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
726
  /* old=  c, write:del, read:add, close:add */
727
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
728
  /* old=  c, write:del, read:add, close:del */
729
  { EPOLLIN, EPOLL_CTL_MOD },
730
  /* old=  c, write:del, read:add, close:xxx */
731
  { 0, 255 },
732
  /* old=  c, write:del, read:del, close:  0 */
733
  { EPOLLRDHUP, EPOLL_CTL_MOD },
734
  /* old=  c, write:del, read:del, close:add */
735
  { EPOLLRDHUP, EPOLL_CTL_MOD },
736
  /* old=  c, write:del, read:del, close:del */
737
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
738
  /* old=  c, write:del, read:del, close:xxx */
739
  { 0, 255 },
740
  /* old=  c, write:del, read:xxx, close:  0 */
741
  { 0, 255 },
742
  /* old=  c, write:del, read:xxx, close:add */
743
  { 0, 255 },
744
  /* old=  c, write:del, read:xxx, close:del */
745
  { 0, 255 },
746
  /* old=  c, write:del, read:xxx, close:xxx */
747
  { 0, 255 },
748
  /* old=  c, write:xxx, read:  0, close:  0 */
749
  { 0, 255 },
750
  /* old=  c, write:xxx, read:  0, close:add */
751
  { 0, 255 },
752
  /* old=  c, write:xxx, read:  0, close:del */
753
  { 0, 255 },
754
  /* old=  c, write:xxx, read:  0, close:xxx */
755
  { 0, 255 },
756
  /* old=  c, write:xxx, read:add, close:  0 */
757
  { 0, 255 },
758
  /* old=  c, write:xxx, read:add, close:add */
759
  { 0, 255 },
760
  /* old=  c, write:xxx, read:add, close:del */
761
  { 0, 255 },
762
  /* old=  c, write:xxx, read:add, close:xxx */
763
  { 0, 255 },
764
  /* old=  c, write:xxx, read:del, close:  0 */
765
  { 0, 255 },
766
  /* old=  c, write:xxx, read:del, close:add */
767
  { 0, 255 },
768
  /* old=  c, write:xxx, read:del, close:del */
769
  { 0, 255 },
770
  /* old=  c, write:xxx, read:del, close:xxx */
771
  { 0, 255 },
772
  /* old=  c, write:xxx, read:xxx, close:  0 */
773
  { 0, 255 },
774
  /* old=  c, write:xxx, read:xxx, close:add */
775
  { 0, 255 },
776
  /* old=  c, write:xxx, read:xxx, close:del */
777
  { 0, 255 },
778
  /* old=  c, write:xxx, read:xxx, close:xxx */
779
  { 0, 255 },
780
  /* old= cr, write:  0, read:  0, close:  0 */
781
  { 0, 0 },
782
  /* old= cr, write:  0, read:  0, close:add */
783
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
784
  /* old= cr, write:  0, read:  0, close:del */
785
  { EPOLLIN, EPOLL_CTL_MOD },
786
  /* old= cr, write:  0, read:  0, close:xxx */
787
  { 0, 255 },
788
  /* old= cr, write:  0, read:add, close:  0 */
789
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
790
  /* old= cr, write:  0, read:add, close:add */
791
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
792
  /* old= cr, write:  0, read:add, close:del */
793
  { EPOLLIN, EPOLL_CTL_MOD },
794
  /* old= cr, write:  0, read:add, close:xxx */
795
  { 0, 255 },
796
  /* old= cr, write:  0, read:del, close:  0 */
797
  { EPOLLRDHUP, EPOLL_CTL_MOD },
798
  /* old= cr, write:  0, read:del, close:add */
799
  { EPOLLRDHUP, EPOLL_CTL_MOD },
800
  /* old= cr, write:  0, read:del, close:del */
801
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
802
  /* old= cr, write:  0, read:del, close:xxx */
803
  { 0, 255 },
804
  /* old= cr, write:  0, read:xxx, close:  0 */
805
  { 0, 255 },
806
  /* old= cr, write:  0, read:xxx, close:add */
807
  { 0, 255 },
808
  /* old= cr, write:  0, read:xxx, close:del */
809
  { 0, 255 },
810
  /* old= cr, write:  0, read:xxx, close:xxx */
811
  { 0, 255 },
812
  /* old= cr, write:add, read:  0, close:  0 */
813
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
814
  /* old= cr, write:add, read:  0, close:add */
815
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
816
  /* old= cr, write:add, read:  0, close:del */
817
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
818
  /* old= cr, write:add, read:  0, close:xxx */
819
  { 0, 255 },
820
  /* old= cr, write:add, read:add, close:  0 */
821
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
822
  /* old= cr, write:add, read:add, close:add */
823
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
824
  /* old= cr, write:add, read:add, close:del */
825
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
826
  /* old= cr, write:add, read:add, close:xxx */
827
  { 0, 255 },
828
  /* old= cr, write:add, read:del, close:  0 */
829
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
830
  /* old= cr, write:add, read:del, close:add */
831
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
832
  /* old= cr, write:add, read:del, close:del */
833
  { EPOLLOUT, EPOLL_CTL_MOD },
834
  /* old= cr, write:add, read:del, close:xxx */
835
  { 0, 255 },
836
  /* old= cr, write:add, read:xxx, close:  0 */
837
  { 0, 255 },
838
  /* old= cr, write:add, read:xxx, close:add */
839
  { 0, 255 },
840
  /* old= cr, write:add, read:xxx, close:del */
841
  { 0, 255 },
842
  /* old= cr, write:add, read:xxx, close:xxx */
843
  { 0, 255 },
844
  /* old= cr, write:del, read:  0, close:  0 */
845
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
846
  /* old= cr, write:del, read:  0, close:add */
847
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
848
  /* old= cr, write:del, read:  0, close:del */
849
  { EPOLLIN, EPOLL_CTL_MOD },
850
  /* old= cr, write:del, read:  0, close:xxx */
851
  { 0, 255 },
852
  /* old= cr, write:del, read:add, close:  0 */
853
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
854
  /* old= cr, write:del, read:add, close:add */
855
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
856
  /* old= cr, write:del, read:add, close:del */
857
  { EPOLLIN, EPOLL_CTL_MOD },
858
  /* old= cr, write:del, read:add, close:xxx */
859
  { 0, 255 },
860
  /* old= cr, write:del, read:del, close:  0 */
861
  { EPOLLRDHUP, EPOLL_CTL_MOD },
862
  /* old= cr, write:del, read:del, close:add */
863
  { EPOLLRDHUP, EPOLL_CTL_MOD },
864
  /* old= cr, write:del, read:del, close:del */
865
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
866
  /* old= cr, write:del, read:del, close:xxx */
867
  { 0, 255 },
868
  /* old= cr, write:del, read:xxx, close:  0 */
869
  { 0, 255 },
870
  /* old= cr, write:del, read:xxx, close:add */
871
  { 0, 255 },
872
  /* old= cr, write:del, read:xxx, close:del */
873
  { 0, 255 },
874
  /* old= cr, write:del, read:xxx, close:xxx */
875
  { 0, 255 },
876
  /* old= cr, write:xxx, read:  0, close:  0 */
877
  { 0, 255 },
878
  /* old= cr, write:xxx, read:  0, close:add */
879
  { 0, 255 },
880
  /* old= cr, write:xxx, read:  0, close:del */
881
  { 0, 255 },
882
  /* old= cr, write:xxx, read:  0, close:xxx */
883
  { 0, 255 },
884
  /* old= cr, write:xxx, read:add, close:  0 */
885
  { 0, 255 },
886
  /* old= cr, write:xxx, read:add, close:add */
887
  { 0, 255 },
888
  /* old= cr, write:xxx, read:add, close:del */
889
  { 0, 255 },
890
  /* old= cr, write:xxx, read:add, close:xxx */
891
  { 0, 255 },
892
  /* old= cr, write:xxx, read:del, close:  0 */
893
  { 0, 255 },
894
  /* old= cr, write:xxx, read:del, close:add */
895
  { 0, 255 },
896
  /* old= cr, write:xxx, read:del, close:del */
897
  { 0, 255 },
898
  /* old= cr, write:xxx, read:del, close:xxx */
899
  { 0, 255 },
900
  /* old= cr, write:xxx, read:xxx, close:  0 */
901
  { 0, 255 },
902
  /* old= cr, write:xxx, read:xxx, close:add */
903
  { 0, 255 },
904
  /* old= cr, write:xxx, read:xxx, close:del */
905
  { 0, 255 },
906
  /* old= cr, write:xxx, read:xxx, close:xxx */
907
  { 0, 255 },
908
  /* old= cw, write:  0, read:  0, close:  0 */
909
  { 0, 0 },
910
  /* old= cw, write:  0, read:  0, close:add */
911
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
912
  /* old= cw, write:  0, read:  0, close:del */
913
  { EPOLLOUT, EPOLL_CTL_MOD },
914
  /* old= cw, write:  0, read:  0, close:xxx */
915
  { 0, 255 },
916
  /* old= cw, write:  0, read:add, close:  0 */
917
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
918
  /* old= cw, write:  0, read:add, close:add */
919
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
920
  /* old= cw, write:  0, read:add, close:del */
921
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
922
  /* old= cw, write:  0, read:add, close:xxx */
923
  { 0, 255 },
924
  /* old= cw, write:  0, read:del, close:  0 */
925
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
926
  /* old= cw, write:  0, read:del, close:add */
927
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
928
  /* old= cw, write:  0, read:del, close:del */
929
  { EPOLLOUT, EPOLL_CTL_MOD },
930
  /* old= cw, write:  0, read:del, close:xxx */
931
  { 0, 255 },
932
  /* old= cw, write:  0, read:xxx, close:  0 */
933
  { 0, 255 },
934
  /* old= cw, write:  0, read:xxx, close:add */
935
  { 0, 255 },
936
  /* old= cw, write:  0, read:xxx, close:del */
937
  { 0, 255 },
938
  /* old= cw, write:  0, read:xxx, close:xxx */
939
  { 0, 255 },
940
  /* old= cw, write:add, read:  0, close:  0 */
941
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
942
  /* old= cw, write:add, read:  0, close:add */
943
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
944
  /* old= cw, write:add, read:  0, close:del */
945
  { EPOLLOUT, EPOLL_CTL_MOD },
946
  /* old= cw, write:add, read:  0, close:xxx */
947
  { 0, 255 },
948
  /* old= cw, write:add, read:add, close:  0 */
949
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
950
  /* old= cw, write:add, read:add, close:add */
951
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
952
  /* old= cw, write:add, read:add, close:del */
953
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
954
  /* old= cw, write:add, read:add, close:xxx */
955
  { 0, 255 },
956
  /* old= cw, write:add, read:del, close:  0 */
957
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
958
  /* old= cw, write:add, read:del, close:add */
959
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
960
  /* old= cw, write:add, read:del, close:del */
961
  { EPOLLOUT, EPOLL_CTL_MOD },
962
  /* old= cw, write:add, read:del, close:xxx */
963
  { 0, 255 },
964
  /* old= cw, write:add, read:xxx, close:  0 */
965
  { 0, 255 },
966
  /* old= cw, write:add, read:xxx, close:add */
967
  { 0, 255 },
968
  /* old= cw, write:add, read:xxx, close:del */
969
  { 0, 255 },
970
  /* old= cw, write:add, read:xxx, close:xxx */
971
  { 0, 255 },
972
  /* old= cw, write:del, read:  0, close:  0 */
973
  { EPOLLRDHUP, EPOLL_CTL_MOD },
974
  /* old= cw, write:del, read:  0, close:add */
975
  { EPOLLRDHUP, EPOLL_CTL_MOD },
976
  /* old= cw, write:del, read:  0, close:del */
977
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
978
  /* old= cw, write:del, read:  0, close:xxx */
979
  { 0, 255 },
980
  /* old= cw, write:del, read:add, close:  0 */
981
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
982
  /* old= cw, write:del, read:add, close:add */
983
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
984
  /* old= cw, write:del, read:add, close:del */
985
  { EPOLLIN, EPOLL_CTL_MOD },
986
  /* old= cw, write:del, read:add, close:xxx */
987
  { 0, 255 },
988
  /* old= cw, write:del, read:del, close:  0 */
989
  { EPOLLRDHUP, EPOLL_CTL_MOD },
990
  /* old= cw, write:del, read:del, close:add */
991
  { EPOLLRDHUP, EPOLL_CTL_MOD },
992
  /* old= cw, write:del, read:del, close:del */
993
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
994
  /* old= cw, write:del, read:del, close:xxx */
995
  { 0, 255 },
996
  /* old= cw, write:del, read:xxx, close:  0 */
997
  { 0, 255 },
998
  /* old= cw, write:del, read:xxx, close:add */
999
  { 0, 255 },
1000
  /* old= cw, write:del, read:xxx, close:del */
1001
  { 0, 255 },
1002
  /* old= cw, write:del, read:xxx, close:xxx */
1003
  { 0, 255 },
1004
  /* old= cw, write:xxx, read:  0, close:  0 */
1005
  { 0, 255 },
1006
  /* old= cw, write:xxx, read:  0, close:add */
1007
  { 0, 255 },
1008
  /* old= cw, write:xxx, read:  0, close:del */
1009
  { 0, 255 },
1010
  /* old= cw, write:xxx, read:  0, close:xxx */
1011
  { 0, 255 },
1012
  /* old= cw, write:xxx, read:add, close:  0 */
1013
  { 0, 255 },
1014
  /* old= cw, write:xxx, read:add, close:add */
1015
  { 0, 255 },
1016
  /* old= cw, write:xxx, read:add, close:del */
1017
  { 0, 255 },
1018
  /* old= cw, write:xxx, read:add, close:xxx */
1019
  { 0, 255 },
1020
  /* old= cw, write:xxx, read:del, close:  0 */
1021
  { 0, 255 },
1022
  /* old= cw, write:xxx, read:del, close:add */
1023
  { 0, 255 },
1024
  /* old= cw, write:xxx, read:del, close:del */
1025
  { 0, 255 },
1026
  /* old= cw, write:xxx, read:del, close:xxx */
1027
  { 0, 255 },
1028
  /* old= cw, write:xxx, read:xxx, close:  0 */
1029
  { 0, 255 },
1030
  /* old= cw, write:xxx, read:xxx, close:add */
1031
  { 0, 255 },
1032
  /* old= cw, write:xxx, read:xxx, close:del */
1033
  { 0, 255 },
1034
  /* old= cw, write:xxx, read:xxx, close:xxx */
1035
  { 0, 255 },
1036
  /* old=crw, write:  0, read:  0, close:  0 */
1037
  { 0, 0 },
1038
  /* old=crw, write:  0, read:  0, close:add */
1039
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1040
  /* old=crw, write:  0, read:  0, close:del */
1041
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
1042
  /* old=crw, write:  0, read:  0, close:xxx */
1043
  { 0, 255 },
1044
  /* old=crw, write:  0, read:add, close:  0 */
1045
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1046
  /* old=crw, write:  0, read:add, close:add */
1047
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1048
  /* old=crw, write:  0, read:add, close:del */
1049
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
1050
  /* old=crw, write:  0, read:add, close:xxx */
1051
  { 0, 255 },
1052
  /* old=crw, write:  0, read:del, close:  0 */
1053
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1054
  /* old=crw, write:  0, read:del, close:add */
1055
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1056
  /* old=crw, write:  0, read:del, close:del */
1057
  { EPOLLOUT, EPOLL_CTL_MOD },
1058
  /* old=crw, write:  0, read:del, close:xxx */
1059
  { 0, 255 },
1060
  /* old=crw, write:  0, read:xxx, close:  0 */
1061
  { 0, 255 },
1062
  /* old=crw, write:  0, read:xxx, close:add */
1063
  { 0, 255 },
1064
  /* old=crw, write:  0, read:xxx, close:del */
1065
  { 0, 255 },
1066
  /* old=crw, write:  0, read:xxx, close:xxx */
1067
  { 0, 255 },
1068
  /* old=crw, write:add, read:  0, close:  0 */
1069
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1070
  /* old=crw, write:add, read:  0, close:add */
1071
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1072
  /* old=crw, write:add, read:  0, close:del */
1073
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
1074
  /* old=crw, write:add, read:  0, close:xxx */
1075
  { 0, 255 },
1076
  /* old=crw, write:add, read:add, close:  0 */
1077
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1078
  /* old=crw, write:add, read:add, close:add */
1079
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1080
  /* old=crw, write:add, read:add, close:del */
1081
  { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
1082
  /* old=crw, write:add, read:add, close:xxx */
1083
  { 0, 255 },
1084
  /* old=crw, write:add, read:del, close:  0 */
1085
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1086
  /* old=crw, write:add, read:del, close:add */
1087
  { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1088
  /* old=crw, write:add, read:del, close:del */
1089
  { EPOLLOUT, EPOLL_CTL_MOD },
1090
  /* old=crw, write:add, read:del, close:xxx */
1091
  { 0, 255 },
1092
  /* old=crw, write:add, read:xxx, close:  0 */
1093
  { 0, 255 },
1094
  /* old=crw, write:add, read:xxx, close:add */
1095
  { 0, 255 },
1096
  /* old=crw, write:add, read:xxx, close:del */
1097
  { 0, 255 },
1098
  /* old=crw, write:add, read:xxx, close:xxx */
1099
  { 0, 255 },
1100
  /* old=crw, write:del, read:  0, close:  0 */
1101
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
1102
  /* old=crw, write:del, read:  0, close:add */
1103
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
1104
  /* old=crw, write:del, read:  0, close:del */
1105
  { EPOLLIN, EPOLL_CTL_MOD },
1106
  /* old=crw, write:del, read:  0, close:xxx */
1107
  { 0, 255 },
1108
  /* old=crw, write:del, read:add, close:  0 */
1109
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
1110
  /* old=crw, write:del, read:add, close:add */
1111
  { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
1112
  /* old=crw, write:del, read:add, close:del */
1113
  { EPOLLIN, EPOLL_CTL_MOD },
1114
  /* old=crw, write:del, read:add, close:xxx */
1115
  { 0, 255 },
1116
  /* old=crw, write:del, read:del, close:  0 */
1117
  { EPOLLRDHUP, EPOLL_CTL_MOD },
1118
  /* old=crw, write:del, read:del, close:add */
1119
  { EPOLLRDHUP, EPOLL_CTL_MOD },
1120
  /* old=crw, write:del, read:del, close:del */
1121
  { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
1122
  /* old=crw, write:del, read:del, close:xxx */
1123
  { 0, 255 },
1124
  /* old=crw, write:del, read:xxx, close:  0 */
1125
  { 0, 255 },
1126
  /* old=crw, write:del, read:xxx, close:add */
1127
  { 0, 255 },
1128
  /* old=crw, write:del, read:xxx, close:del */
1129
  { 0, 255 },
1130
  /* old=crw, write:del, read:xxx, close:xxx */
1131
  { 0, 255 },
1132
  /* old=crw, write:xxx, read:  0, close:  0 */
1133
  { 0, 255 },
1134
  /* old=crw, write:xxx, read:  0, close:add */
1135
  { 0, 255 },
1136
  /* old=crw, write:xxx, read:  0, close:del */
1137
  { 0, 255 },
1138
  /* old=crw, write:xxx, read:  0, close:xxx */
1139
  { 0, 255 },
1140
  /* old=crw, write:xxx, read:add, close:  0 */
1141
  { 0, 255 },
1142
  /* old=crw, write:xxx, read:add, close:add */
1143
  { 0, 255 },
1144
  /* old=crw, write:xxx, read:add, close:del */
1145
  { 0, 255 },
1146
  /* old=crw, write:xxx, read:add, close:xxx */
1147
  { 0, 255 },
1148
  /* old=crw, write:xxx, read:del, close:  0 */
1149
  { 0, 255 },
1150
  /* old=crw, write:xxx, read:del, close:add */
1151
  { 0, 255 },
1152
  /* old=crw, write:xxx, read:del, close:del */
1153
  { 0, 255 },
1154
  /* old=crw, write:xxx, read:del, close:xxx */
1155
  { 0, 255 },
1156
  /* old=crw, write:xxx, read:xxx, close:  0 */
1157
  { 0, 255 },
1158
  /* old=crw, write:xxx, read:xxx, close:add */
1159
  { 0, 255 },
1160
  /* old=crw, write:xxx, read:xxx, close:del */
1161
  { 0, 255 },
1162
  /* old=crw, write:xxx, read:xxx, close:xxx */
1163
  { 0, 255 },
1164
};
1165
1166
#endif