]> granicus.if.org Git - libevent/commitdiff
Split epoll lookup table into a separate header file
authorNick Mathewson <nickm@torproject.org>
Tue, 21 Jan 2014 20:47:44 +0000 (15:47 -0500)
committerNick Mathewson <nickm@torproject.org>
Tue, 21 Jan 2014 21:15:21 +0000 (16:15 -0500)
It accounted for more than half the length of epoll.c, and it's
machine-generated, so we might as well keep it separate.

CMakeLists.txt
Makefile.am
epoll.c
epolltable-internal.h [new file with mode: 0644]

index 35636186db2fcd640903744702d85fefac332fd6..52bd12d3cc836d3438249dc06a2a6dbab0743073 100644 (file)
@@ -473,6 +473,7 @@ set(HDR_PRIVATE
     bufferevent-internal.h
     changelist-internal.h
     defer-internal.h
+    epolltable-internal.h
     evbuffer-internal.h
     include/evdns.h
     event-internal.h
index 3ca6a151231f8e12ebb0f7afe06e6a2542e8dceb..58f1f016a81d25c675139bdcf1fa7640b872b17c 100644 (file)
@@ -254,6 +254,7 @@ noinst_HEADERS +=                           \
        changelist-internal.h                   \
        compat/sys/queue.h                      \
        defer-internal.h                        \
+       epolltable-internal.h                   \
        evbuffer-internal.h                     \
        evconfig-private.h                      \
        event-internal.h                        \
diff --git a/epoll.c b/epoll.c
index bd425ed5163b7bb4d3e5c98558264d0737b391b8..41a2a120f2843e594d1b97ff5aea4637bb5fcf53 100644 (file)
--- a/epoll.c
+++ b/epoll.c
@@ -59,6 +59,7 @@
 #include "evmap-internal.h"
 #include "changelist-internal.h"
 #include "time-internal.h"
+#include "epolltable-internal.h"
 
 #if defined(EVENT__HAVE_SYS_TIMERFD_H) &&                        \
        defined(EVENT__HAVE_TIMERFD_CREATE) &&                    \
@@ -241,1139 +242,6 @@ epoll_op_to_string(int op)
            "???";
 }
 
-/*
-  Here are the values we're masking off to decide what operations to do.
-  Note that since EV_READ|EV_WRITE.
-
-  Note also that this table is a little sparse, since ADD+DEL is
-  nonsensical ("xxx" in the list below.)
-
-  Note also also that we are shifting old_events by only 5 bits, since
-  EV_READ is 2 and EV_WRITE is 4.
-
-  The table was auto-generated with a python script, according to this
-  pseudocode:
-
-      If either the read or the write change is add+del:
-        This is impossible; Set op==-1, events=0.
-      Else, if either the read or the write change is add:
-        Set events to 0.
-        If the read change is add, or
-           (the read change is not del, and ev_read is in old_events):
-              Add EPOLLIN to events.
-        If the write change is add, or
-           (the write change is not del, and ev_write is in old_events):
-              Add EPOLLOUT to events.
-
-        If old_events is set:
-              Set op to EPOLL_CTL_MOD [*1,*2]
-       Else:
-              Set op to EPOLL_CTL_ADD [*3]
-
-      Else, if the read or the write change is del:
-        Set op to EPOLL_CTL_DEL.
-        If the read change is del:
-            If the write change is del:
-                Set events to EPOLLIN|EPOLLOUT
-            Else if ev_write is in old_events:
-                Set events to EPOLLOUT
-               Set op to EPOLL_CTL_MOD
-            Else
-                Set events to EPOLLIN
-        Else:
-            {The write change is del.}
-           If ev_read is in old_events:
-                Set events to EPOLLIN
-               Set op to EPOLL_CTL_MOD
-           Else:
-               Set the events to EPOLLOUT
-
-      Else:
-          There is no read or write change; set op to 0 and events to 0.
-
-      The logic is a little tricky, since we had no events set on the fd before,
-      we need to set op="ADD" and set events=the events we want to add.         If we
-      had any events set on the fd before, and we want any events to remain on
-      the fd, we need to say op="MOD" and set events=the events we want to
-      remain.  But if we want to delete the last event, we say op="DEL" and
-      set events=(any non-null pointer).
-
-  [*1] This MOD is only a guess.  MOD might fail with ENOENT if the file was
-       closed and a new file was opened with the same fd.  If so, we'll retry
-       with ADD.
-
-  [*2] We can't replace this with a no-op even if old_events is the same as
-       the new events: if the file was closed and reopened, we need to retry
-       with an ADD.  (We do a MOD in this case since "no change" is more
-       common than "close and reopen", so we'll usually wind up doing 1
-       syscalls instead of 2.)
-
-  [*3] This ADD is only a guess.  There is a fun Linux kernel issue where if
-       you have two fds for the same file (via dup) and you ADD one to an
-       epfd, then close it, then re-create it with the same fd (via dup2 or an
-       unlucky dup), then try to ADD it again, you'll get an EEXIST, since the
-       struct epitem is not actually removed from the struct eventpoll until
-       the file itself is closed.
-
-  EV_CHANGE_ADD==1
-  EV_CHANGE_DEL==2
-  EV_READ      ==2
-  EV_WRITE     ==4
-  EV_CLOSED    ==0x80
-
-  Bit 0: close change is add
-  Bit 1: close change is del
-  Bit 2: read change is add
-  Bit 3: read change is del
-  Bit 4: write change is add
-  Bit 5: write change is del
-  Bit 6: old events had EV_READ
-  Bit 7: old events had EV_WRITE
-  Bit 8: old events had EV_CLOSED
-*/
-
-#define INDEX(c) \
-       (   (((c)->close_change&(EV_CHANGE_ADD|EV_CHANGE_DEL))) |               \
-           (((c)->read_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 2) |   \
-           (((c)->write_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 4) |  \
-           (((c)->old_events&(EV_READ|EV_WRITE)) << 5) |               \
-           (((c)->old_events&(EV_CLOSED)) << 1)                                \
-           )
-
-#if EV_READ != 2 || EV_WRITE != 4 || EV_CHANGE_ADD != 1 || EV_CHANGE_DEL != 2
-#error "Libevent's internals changed!  Regenerate the op_table in epoll.c"
-#endif
-
-static const struct operation {
-       int events;
-       int op;
-} op_table[] = {
-       /* old=  0, write:  0, read:  0, close:  0 */
-       { 0, 0 },
-       /* old=  0, write:  0, read:  0, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_ADD },
-       /* old=  0, write:  0, read:  0, close:del */
-       { EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  0, write:  0, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:  0, read:add, close:  0 */
-       { EPOLLIN, EPOLL_CTL_ADD },
-       /* old=  0, write:  0, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
-       /* old=  0, write:  0, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_ADD },
-       /* old=  0, write:  0, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:  0, read:del, close:  0 */
-       { EPOLLIN, EPOLL_CTL_DEL },
-       /* old=  0, write:  0, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_ADD },
-       /* old=  0, write:  0, read:del, close:del */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  0, write:  0, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:  0, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  0, write:  0, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  0, write:  0, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  0, write:  0, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:add, read:  0, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_ADD },
-       /* old=  0, write:add, read:  0, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
-       /* old=  0, write:add, read:  0, close:del */
-       { EPOLLOUT, EPOLL_CTL_ADD },
-       /* old=  0, write:add, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:add, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
-       /* old=  0, write:add, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
-       /* old=  0, write:add, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
-       /* old=  0, write:add, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:add, read:del, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_ADD },
-       /* old=  0, write:add, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
-       /* old=  0, write:add, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_ADD },
-       /* old=  0, write:add, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:add, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  0, write:add, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  0, write:add, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  0, write:add, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:del, read:  0, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_DEL },
-       /* old=  0, write:del, read:  0, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_ADD },
-       /* old=  0, write:del, read:  0, close:del */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  0, write:del, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:del, read:add, close:  0 */
-       { EPOLLIN, EPOLL_CTL_ADD },
-       /* old=  0, write:del, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
-       /* old=  0, write:del, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_ADD },
-       /* old=  0, write:del, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:del, read:del, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
-       /* old=  0, write:del, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_ADD },
-       /* old=  0, write:del, read:del, close:del */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  0, write:del, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:del, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  0, write:del, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  0, write:del, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  0, write:del, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:  0, close:  0 */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:  0, close:add */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:  0, close:del */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:add, close:  0 */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:add, close:add */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:add, close:del */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:del, close:  0 */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:del, close:add */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:del, close:del */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  0, write:xxx, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:  0, read:  0, close:  0 */
-       { 0, 0 },
-       /* old=  r, write:  0, read:  0, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  r, write:  0, read:  0, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  r, write:  0, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:  0, read:add, close:  0 */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  r, write:  0, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  r, write:  0, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  r, write:  0, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:  0, read:del, close:  0 */
-       { EPOLLIN, EPOLL_CTL_DEL },
-       /* old=  r, write:  0, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  r, write:  0, read:del, close:del */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  r, write:  0, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:  0, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  r, write:  0, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  r, write:  0, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  r, write:  0, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:add, read:  0, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  r, write:add, read:  0, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  r, write:add, read:  0, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  r, write:add, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:add, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  r, write:add, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  r, write:add, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  r, write:add, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:add, read:del, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  r, write:add, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  r, write:add, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  r, write:add, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:add, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  r, write:add, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  r, write:add, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  r, write:add, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:del, read:  0, close:  0 */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  r, write:del, read:  0, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  r, write:del, read:  0, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  r, write:del, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:del, read:add, close:  0 */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  r, write:del, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  r, write:del, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  r, write:del, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:del, read:del, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
-       /* old=  r, write:del, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  r, write:del, read:del, close:del */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  r, write:del, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:del, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  r, write:del, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  r, write:del, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  r, write:del, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:  0, close:  0 */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:  0, close:add */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:  0, close:del */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:add, close:  0 */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:add, close:add */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:add, close:del */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:del, close:  0 */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:del, close:add */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:del, close:del */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  r, write:xxx, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:  0, read:  0, close:  0 */
-       { 0, 0 },
-       /* old=  w, write:  0, read:  0, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  w, write:  0, read:  0, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:  0, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:  0, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:  0, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  w, write:  0, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:  0, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:  0, read:del, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:  0, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  w, write:  0, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:  0, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:  0, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  w, write:  0, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  w, write:  0, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  w, write:  0, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:add, read:  0, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:add, read:  0, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  w, write:add, read:  0, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:add, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:add, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:add, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  w, write:add, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:add, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:add, read:del, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:add, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  w, write:add, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  w, write:add, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:add, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  w, write:add, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  w, write:add, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  w, write:add, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:del, read:  0, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_DEL },
-       /* old=  w, write:del, read:  0, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  w, write:del, read:  0, close:del */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  w, write:del, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:del, read:add, close:  0 */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  w, write:del, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  w, write:del, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  w, write:del, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:del, read:del, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
-       /* old=  w, write:del, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  w, write:del, read:del, close:del */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  w, write:del, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:del, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  w, write:del, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  w, write:del, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  w, write:del, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:  0, close:  0 */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:  0, close:add */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:  0, close:del */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:add, close:  0 */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:add, close:add */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:add, close:del */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:del, close:  0 */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:del, close:add */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:del, close:del */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  w, write:xxx, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:  0, read:  0, close:  0 */
-       { 0, 0 },
-       /* old= rw, write:  0, read:  0, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= rw, write:  0, read:  0, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:  0, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:  0, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:  0, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= rw, write:  0, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:  0, read:add, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:  0, read:del, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:  0, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= rw, write:  0, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:  0, read:del, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:  0, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= rw, write:  0, read:xxx, close:add */
-       { 0, 255 },
-       /* old= rw, write:  0, read:xxx, close:del */
-       { 0, 255 },
-       /* old= rw, write:  0, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:add, read:  0, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:add, read:  0, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= rw, write:add, read:  0, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:add, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:add, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:add, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= rw, write:add, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:add, read:add, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:add, read:del, close:  0 */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:add, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= rw, write:add, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= rw, write:add, read:del, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:add, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= rw, write:add, read:xxx, close:add */
-       { 0, 255 },
-       /* old= rw, write:add, read:xxx, close:del */
-       { 0, 255 },
-       /* old= rw, write:add, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:del, read:  0, close:  0 */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old= rw, write:del, read:  0, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= rw, write:del, read:  0, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old= rw, write:del, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:del, read:add, close:  0 */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old= rw, write:del, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= rw, write:del, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old= rw, write:del, read:add, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:del, read:del, close:  0 */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
-       /* old= rw, write:del, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= rw, write:del, read:del, close:del */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old= rw, write:del, read:del, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:del, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= rw, write:del, read:xxx, close:add */
-       { 0, 255 },
-       /* old= rw, write:del, read:xxx, close:del */
-       { 0, 255 },
-       /* old= rw, write:del, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:  0, close:  0 */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:  0, close:add */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:  0, close:del */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:add, close:  0 */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:add, close:add */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:add, close:del */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:add, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:del, close:  0 */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:del, close:add */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:del, close:del */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:del, close:xxx */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:xxx, close:add */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:xxx, close:del */
-       { 0, 255 },
-       /* old= rw, write:xxx, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:  0, read:  0, close:  0 */
-       { 0, 0 },
-       /* old=  c, write:  0, read:  0, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:  0, read:  0, close:del */
-       { EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  c, write:  0, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:  0, read:add, close:  0 */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:  0, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:  0, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  c, write:  0, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:  0, read:del, close:  0 */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:  0, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:  0, read:del, close:del */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  c, write:  0, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:  0, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  c, write:  0, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  c, write:  0, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  c, write:  0, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:add, read:  0, close:  0 */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:add, read:  0, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:add, read:  0, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  c, write:add, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:add, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:add, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:add, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  c, write:add, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:add, read:del, close:  0 */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:add, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:add, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=  c, write:add, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:add, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  c, write:add, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  c, write:add, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  c, write:add, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:del, read:  0, close:  0 */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:del, read:  0, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:del, read:  0, close:del */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  c, write:del, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:del, read:add, close:  0 */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:del, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:del, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=  c, write:del, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:del, read:del, close:  0 */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:del, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=  c, write:del, read:del, close:del */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=  c, write:del, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:del, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  c, write:del, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  c, write:del, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  c, write:del, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:  0, close:  0 */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:  0, close:add */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:  0, close:del */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:add, close:  0 */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:add, close:add */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:add, close:del */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:add, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:del, close:  0 */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:del, close:add */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:del, close:del */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:del, close:xxx */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:xxx, close:add */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:xxx, close:del */
-       { 0, 255 },
-       /* old=  c, write:xxx, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:  0, read:  0, close:  0 */
-       { 0, 0 },
-       /* old= cr, write:  0, read:  0, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:  0, read:  0, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old= cr, write:  0, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:  0, read:add, close:  0 */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:  0, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:  0, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old= cr, write:  0, read:add, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:  0, read:del, close:  0 */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:  0, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:  0, read:del, close:del */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old= cr, write:  0, read:del, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:  0, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= cr, write:  0, read:xxx, close:add */
-       { 0, 255 },
-       /* old= cr, write:  0, read:xxx, close:del */
-       { 0, 255 },
-       /* old= cr, write:  0, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:add, read:  0, close:  0 */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:add, read:  0, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:add, read:  0, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= cr, write:add, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:add, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:add, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:add, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= cr, write:add, read:add, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:add, read:del, close:  0 */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:add, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:add, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= cr, write:add, read:del, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:add, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= cr, write:add, read:xxx, close:add */
-       { 0, 255 },
-       /* old= cr, write:add, read:xxx, close:del */
-       { 0, 255 },
-       /* old= cr, write:add, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:del, read:  0, close:  0 */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:del, read:  0, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:del, read:  0, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old= cr, write:del, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:del, read:add, close:  0 */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:del, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:del, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old= cr, write:del, read:add, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:del, read:del, close:  0 */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:del, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cr, write:del, read:del, close:del */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old= cr, write:del, read:del, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:del, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= cr, write:del, read:xxx, close:add */
-       { 0, 255 },
-       /* old= cr, write:del, read:xxx, close:del */
-       { 0, 255 },
-       /* old= cr, write:del, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:  0, close:  0 */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:  0, close:add */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:  0, close:del */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:add, close:  0 */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:add, close:add */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:add, close:del */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:add, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:del, close:  0 */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:del, close:add */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:del, close:del */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:del, close:xxx */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:xxx, close:add */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:xxx, close:del */
-       { 0, 255 },
-       /* old= cr, write:xxx, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:  0, read:  0, close:  0 */
-       { 0, 0 },
-       /* old= cw, write:  0, read:  0, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:  0, read:  0, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= cw, write:  0, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:  0, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:  0, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:  0, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= cw, write:  0, read:add, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:  0, read:del, close:  0 */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:  0, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:  0, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= cw, write:  0, read:del, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:  0, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= cw, write:  0, read:xxx, close:add */
-       { 0, 255 },
-       /* old= cw, write:  0, read:xxx, close:del */
-       { 0, 255 },
-       /* old= cw, write:  0, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:add, read:  0, close:  0 */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:add, read:  0, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:add, read:  0, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= cw, write:add, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:add, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:add, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:add, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= cw, write:add, read:add, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:add, read:del, close:  0 */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:add, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:add, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old= cw, write:add, read:del, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:add, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= cw, write:add, read:xxx, close:add */
-       { 0, 255 },
-       /* old= cw, write:add, read:xxx, close:del */
-       { 0, 255 },
-       /* old= cw, write:add, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:del, read:  0, close:  0 */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:del, read:  0, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:del, read:  0, close:del */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old= cw, write:del, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:del, read:add, close:  0 */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:del, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:del, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old= cw, write:del, read:add, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:del, read:del, close:  0 */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:del, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old= cw, write:del, read:del, close:del */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old= cw, write:del, read:del, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:del, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= cw, write:del, read:xxx, close:add */
-       { 0, 255 },
-       /* old= cw, write:del, read:xxx, close:del */
-       { 0, 255 },
-       /* old= cw, write:del, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:  0, close:  0 */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:  0, close:add */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:  0, close:del */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:  0, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:add, close:  0 */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:add, close:add */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:add, close:del */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:add, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:del, close:  0 */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:del, close:add */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:del, close:del */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:del, close:xxx */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:xxx, close:add */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:xxx, close:del */
-       { 0, 255 },
-       /* old= cw, write:xxx, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:  0, read:  0, close:  0 */
-       { 0, 0 },
-       /* old=crw, write:  0, read:  0, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:  0, read:  0, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=crw, write:  0, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:  0, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:  0, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:  0, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=crw, write:  0, read:add, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:  0, read:del, close:  0 */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:  0, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:  0, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=crw, write:  0, read:del, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:  0, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=crw, write:  0, read:xxx, close:add */
-       { 0, 255 },
-       /* old=crw, write:  0, read:xxx, close:del */
-       { 0, 255 },
-       /* old=crw, write:  0, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:add, read:  0, close:  0 */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:add, read:  0, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:add, read:  0, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=crw, write:add, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:add, read:add, close:  0 */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:add, read:add, close:add */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:add, read:add, close:del */
-       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=crw, write:add, read:add, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:add, read:del, close:  0 */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:add, read:del, close:add */
-       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:add, read:del, close:del */
-       { EPOLLOUT, EPOLL_CTL_MOD },
-       /* old=crw, write:add, read:del, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:add, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=crw, write:add, read:xxx, close:add */
-       { 0, 255 },
-       /* old=crw, write:add, read:xxx, close:del */
-       { 0, 255 },
-       /* old=crw, write:add, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:del, read:  0, close:  0 */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:del, read:  0, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:del, read:  0, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=crw, write:del, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:del, read:add, close:  0 */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:del, read:add, close:add */
-       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:del, read:add, close:del */
-       { EPOLLIN, EPOLL_CTL_MOD },
-       /* old=crw, write:del, read:add, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:del, read:del, close:  0 */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:del, read:del, close:add */
-       { EPOLLRDHUP, EPOLL_CTL_MOD },
-       /* old=crw, write:del, read:del, close:del */
-       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
-       /* old=crw, write:del, read:del, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:del, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=crw, write:del, read:xxx, close:add */
-       { 0, 255 },
-       /* old=crw, write:del, read:xxx, close:del */
-       { 0, 255 },
-       /* old=crw, write:del, read:xxx, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:  0, close:  0 */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:  0, close:add */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:  0, close:del */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:  0, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:add, close:  0 */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:add, close:add */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:add, close:del */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:add, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:del, close:  0 */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:del, close:add */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:del, close:del */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:del, close:xxx */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:xxx, close:  0 */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:xxx, close:add */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:xxx, close:del */
-       { 0, 255 },
-       /* old=crw, write:xxx, read:xxx, close:xxx */
-       { 0, 255 },
-};
-
 static int
 epoll_apply_one_change(struct event_base *base,
     struct epollop *epollop,
@@ -1383,9 +251,9 @@ epoll_apply_one_change(struct event_base *base,
        int op, events = 0;
        int idx;
 
-       idx = INDEX(ch);
-       op = op_table[idx].op;
-       events = op_table[idx].events;
+       idx = EPOLL_OP_TABLE_INDEX(ch);
+       op = epoll_op_table[idx].op;
+       events = epoll_op_table[idx].events;
 
        if (!events) {
                EVUTIL_ASSERT(op == 0);
diff --git a/epolltable-internal.h b/epolltable-internal.h
new file mode 100644 (file)
index 0000000..da30e09
--- /dev/null
@@ -0,0 +1,1166 @@
+/*
+ * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
+ * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef EPOLLTABLE_INTERNAL_H_INCLUDED_
+#define EPOLLTABLE_INTERNAL_H_INCLUDED_
+
+/*
+  Here are the values we're masking off to decide what operations to do.
+  Note that since EV_READ|EV_WRITE.
+
+  Note also that this table is a little sparse, since ADD+DEL is
+  nonsensical ("xxx" in the list below.)
+
+  Note also also that we are shifting old_events by only 5 bits, since
+  EV_READ is 2 and EV_WRITE is 4.
+
+  The table was auto-generated with a python script, according to this
+  pseudocode:[*0]
+
+      If either the read or the write change is add+del:
+        This is impossible; Set op==-1, events=0.
+      Else, if either the read or the write change is add:
+        Set events to 0.
+        If the read change is add, or
+           (the read change is not del, and ev_read is in old_events):
+              Add EPOLLIN to events.
+        If the write change is add, or
+           (the write change is not del, and ev_write is in old_events):
+              Add EPOLLOUT to events.
+
+        If old_events is set:
+              Set op to EPOLL_CTL_MOD [*1,*2]
+       Else:
+              Set op to EPOLL_CTL_ADD [*3]
+
+      Else, if the read or the write change is del:
+        Set op to EPOLL_CTL_DEL.
+        If the read change is del:
+            If the write change is del:
+                Set events to EPOLLIN|EPOLLOUT
+            Else if ev_write is in old_events:
+                Set events to EPOLLOUT
+               Set op to EPOLL_CTL_MOD
+            Else
+                Set events to EPOLLIN
+        Else:
+            {The write change is del.}
+           If ev_read is in old_events:
+                Set events to EPOLLIN
+               Set op to EPOLL_CTL_MOD
+           Else:
+               Set the events to EPOLLOUT
+
+      Else:
+          There is no read or write change; set op to 0 and events to 0.
+
+      The logic is a little tricky, since we had no events set on the fd before,
+      we need to set op="ADD" and set events=the events we want to add.         If we
+      had any events set on the fd before, and we want any events to remain on
+      the fd, we need to say op="MOD" and set events=the events we want to
+      remain.  But if we want to delete the last event, we say op="DEL" and
+      set events=(any non-null pointer).
+
+  [*0] Actually, the Python script has gotten a bit more complicated, to
+       support EPOLLRDHUP.
+
+  [*1] This MOD is only a guess.  MOD might fail with ENOENT if the file was
+       closed and a new file was opened with the same fd.  If so, we'll retry
+       with ADD.
+
+  [*2] We can't replace this with a no-op even if old_events is the same as
+       the new events: if the file was closed and reopened, we need to retry
+       with an ADD.  (We do a MOD in this case since "no change" is more
+       common than "close and reopen", so we'll usually wind up doing 1
+       syscalls instead of 2.)
+
+  [*3] This ADD is only a guess.  There is a fun Linux kernel issue where if
+       you have two fds for the same file (via dup) and you ADD one to an
+       epfd, then close it, then re-create it with the same fd (via dup2 or an
+       unlucky dup), then try to ADD it again, you'll get an EEXIST, since the
+       struct epitem is not actually removed from the struct eventpoll until
+       the file itself is closed.
+
+  EV_CHANGE_ADD==1
+  EV_CHANGE_DEL==2
+  EV_READ      ==2
+  EV_WRITE     ==4
+  EV_CLOSED    ==0x80
+
+  Bit 0: close change is add
+  Bit 1: close change is del
+  Bit 2: read change is add
+  Bit 3: read change is del
+  Bit 4: write change is add
+  Bit 5: write change is del
+  Bit 6: old events had EV_READ
+  Bit 7: old events had EV_WRITE
+  Bit 8: old events had EV_CLOSED
+*/
+
+#define EPOLL_OP_TABLE_INDEX(c) \
+       (   (((c)->close_change&(EV_CHANGE_ADD|EV_CHANGE_DEL))) |               \
+           (((c)->read_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 2) |   \
+           (((c)->write_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 4) |  \
+           (((c)->old_events&(EV_READ|EV_WRITE)) << 5) |               \
+           (((c)->old_events&(EV_CLOSED)) << 1)                                \
+           )
+
+#if EV_READ != 2 || EV_WRITE != 4 || EV_CLOSED != 0x80 || EV_CHANGE_ADD != 1 || EV_CHANGE_DEL != 2
+#error "Libevent's internals changed!  Regenerate the op_table in epolltable-internal.h"
+#endif
+
+static const struct operation {
+       int events;
+       int op;
+} epoll_op_table[] = {
+       /* old=  0, write:  0, read:  0, close:  0 */
+       { 0, 0 },
+       /* old=  0, write:  0, read:  0, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_ADD },
+       /* old=  0, write:  0, read:  0, close:del */
+       { EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  0, write:  0, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:  0, read:add, close:  0 */
+       { EPOLLIN, EPOLL_CTL_ADD },
+       /* old=  0, write:  0, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
+       /* old=  0, write:  0, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_ADD },
+       /* old=  0, write:  0, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:  0, read:del, close:  0 */
+       { EPOLLIN, EPOLL_CTL_DEL },
+       /* old=  0, write:  0, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_ADD },
+       /* old=  0, write:  0, read:del, close:del */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  0, write:  0, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:  0, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  0, write:  0, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  0, write:  0, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  0, write:  0, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:add, read:  0, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_ADD },
+       /* old=  0, write:add, read:  0, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
+       /* old=  0, write:add, read:  0, close:del */
+       { EPOLLOUT, EPOLL_CTL_ADD },
+       /* old=  0, write:add, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:add, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
+       /* old=  0, write:add, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
+       /* old=  0, write:add, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
+       /* old=  0, write:add, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:add, read:del, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_ADD },
+       /* old=  0, write:add, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
+       /* old=  0, write:add, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_ADD },
+       /* old=  0, write:add, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:add, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  0, write:add, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  0, write:add, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  0, write:add, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:del, read:  0, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_DEL },
+       /* old=  0, write:del, read:  0, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_ADD },
+       /* old=  0, write:del, read:  0, close:del */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  0, write:del, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:del, read:add, close:  0 */
+       { EPOLLIN, EPOLL_CTL_ADD },
+       /* old=  0, write:del, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
+       /* old=  0, write:del, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_ADD },
+       /* old=  0, write:del, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:del, read:del, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
+       /* old=  0, write:del, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_ADD },
+       /* old=  0, write:del, read:del, close:del */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  0, write:del, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:del, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  0, write:del, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  0, write:del, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  0, write:del, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:  0, close:  0 */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:  0, close:add */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:  0, close:del */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:add, close:  0 */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:add, close:add */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:add, close:del */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:del, close:  0 */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:del, close:add */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:del, close:del */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  0, write:xxx, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:  0, read:  0, close:  0 */
+       { 0, 0 },
+       /* old=  r, write:  0, read:  0, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  r, write:  0, read:  0, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  r, write:  0, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:  0, read:add, close:  0 */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  r, write:  0, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  r, write:  0, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  r, write:  0, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:  0, read:del, close:  0 */
+       { EPOLLIN, EPOLL_CTL_DEL },
+       /* old=  r, write:  0, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  r, write:  0, read:del, close:del */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  r, write:  0, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:  0, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  r, write:  0, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  r, write:  0, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  r, write:  0, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:add, read:  0, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  r, write:add, read:  0, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  r, write:add, read:  0, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  r, write:add, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:add, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  r, write:add, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  r, write:add, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  r, write:add, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:add, read:del, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  r, write:add, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  r, write:add, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  r, write:add, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:add, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  r, write:add, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  r, write:add, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  r, write:add, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:del, read:  0, close:  0 */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  r, write:del, read:  0, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  r, write:del, read:  0, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  r, write:del, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:del, read:add, close:  0 */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  r, write:del, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  r, write:del, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  r, write:del, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:del, read:del, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
+       /* old=  r, write:del, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  r, write:del, read:del, close:del */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  r, write:del, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:del, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  r, write:del, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  r, write:del, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  r, write:del, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:  0, close:  0 */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:  0, close:add */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:  0, close:del */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:add, close:  0 */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:add, close:add */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:add, close:del */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:del, close:  0 */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:del, close:add */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:del, close:del */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  r, write:xxx, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:  0, read:  0, close:  0 */
+       { 0, 0 },
+       /* old=  w, write:  0, read:  0, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  w, write:  0, read:  0, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:  0, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:  0, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:  0, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  w, write:  0, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:  0, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:  0, read:del, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:  0, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  w, write:  0, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:  0, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:  0, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  w, write:  0, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  w, write:  0, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  w, write:  0, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:add, read:  0, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:add, read:  0, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  w, write:add, read:  0, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:add, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:add, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:add, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  w, write:add, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:add, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:add, read:del, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:add, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  w, write:add, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  w, write:add, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:add, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  w, write:add, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  w, write:add, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  w, write:add, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:del, read:  0, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_DEL },
+       /* old=  w, write:del, read:  0, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  w, write:del, read:  0, close:del */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  w, write:del, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:del, read:add, close:  0 */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  w, write:del, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  w, write:del, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  w, write:del, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:del, read:del, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
+       /* old=  w, write:del, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  w, write:del, read:del, close:del */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  w, write:del, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:del, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  w, write:del, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  w, write:del, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  w, write:del, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:  0, close:  0 */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:  0, close:add */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:  0, close:del */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:add, close:  0 */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:add, close:add */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:add, close:del */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:del, close:  0 */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:del, close:add */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:del, close:del */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  w, write:xxx, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:  0, read:  0, close:  0 */
+       { 0, 0 },
+       /* old= rw, write:  0, read:  0, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= rw, write:  0, read:  0, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:  0, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:  0, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:  0, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= rw, write:  0, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:  0, read:add, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:  0, read:del, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:  0, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= rw, write:  0, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:  0, read:del, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:  0, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= rw, write:  0, read:xxx, close:add */
+       { 0, 255 },
+       /* old= rw, write:  0, read:xxx, close:del */
+       { 0, 255 },
+       /* old= rw, write:  0, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:add, read:  0, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:add, read:  0, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= rw, write:add, read:  0, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:add, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:add, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:add, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= rw, write:add, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:add, read:add, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:add, read:del, close:  0 */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:add, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= rw, write:add, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= rw, write:add, read:del, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:add, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= rw, write:add, read:xxx, close:add */
+       { 0, 255 },
+       /* old= rw, write:add, read:xxx, close:del */
+       { 0, 255 },
+       /* old= rw, write:add, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:del, read:  0, close:  0 */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old= rw, write:del, read:  0, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= rw, write:del, read:  0, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old= rw, write:del, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:del, read:add, close:  0 */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old= rw, write:del, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= rw, write:del, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old= rw, write:del, read:add, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:del, read:del, close:  0 */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
+       /* old= rw, write:del, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= rw, write:del, read:del, close:del */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old= rw, write:del, read:del, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:del, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= rw, write:del, read:xxx, close:add */
+       { 0, 255 },
+       /* old= rw, write:del, read:xxx, close:del */
+       { 0, 255 },
+       /* old= rw, write:del, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:  0, close:  0 */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:  0, close:add */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:  0, close:del */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:add, close:  0 */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:add, close:add */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:add, close:del */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:add, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:del, close:  0 */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:del, close:add */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:del, close:del */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:del, close:xxx */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:xxx, close:add */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:xxx, close:del */
+       { 0, 255 },
+       /* old= rw, write:xxx, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:  0, read:  0, close:  0 */
+       { 0, 0 },
+       /* old=  c, write:  0, read:  0, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:  0, read:  0, close:del */
+       { EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  c, write:  0, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:  0, read:add, close:  0 */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:  0, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:  0, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  c, write:  0, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:  0, read:del, close:  0 */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:  0, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:  0, read:del, close:del */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  c, write:  0, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:  0, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  c, write:  0, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  c, write:  0, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  c, write:  0, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:add, read:  0, close:  0 */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:add, read:  0, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:add, read:  0, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  c, write:add, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:add, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:add, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:add, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  c, write:add, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:add, read:del, close:  0 */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:add, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:add, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=  c, write:add, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:add, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  c, write:add, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  c, write:add, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  c, write:add, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:del, read:  0, close:  0 */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:del, read:  0, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:del, read:  0, close:del */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  c, write:del, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:del, read:add, close:  0 */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:del, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:del, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=  c, write:del, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:del, read:del, close:  0 */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:del, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=  c, write:del, read:del, close:del */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=  c, write:del, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:del, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  c, write:del, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  c, write:del, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  c, write:del, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:  0, close:  0 */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:  0, close:add */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:  0, close:del */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:add, close:  0 */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:add, close:add */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:add, close:del */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:add, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:del, close:  0 */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:del, close:add */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:del, close:del */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:del, close:xxx */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:xxx, close:add */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:xxx, close:del */
+       { 0, 255 },
+       /* old=  c, write:xxx, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:  0, read:  0, close:  0 */
+       { 0, 0 },
+       /* old= cr, write:  0, read:  0, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:  0, read:  0, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old= cr, write:  0, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:  0, read:add, close:  0 */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:  0, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:  0, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old= cr, write:  0, read:add, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:  0, read:del, close:  0 */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:  0, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:  0, read:del, close:del */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old= cr, write:  0, read:del, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:  0, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= cr, write:  0, read:xxx, close:add */
+       { 0, 255 },
+       /* old= cr, write:  0, read:xxx, close:del */
+       { 0, 255 },
+       /* old= cr, write:  0, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:add, read:  0, close:  0 */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:add, read:  0, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:add, read:  0, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= cr, write:add, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:add, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:add, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:add, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= cr, write:add, read:add, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:add, read:del, close:  0 */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:add, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:add, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= cr, write:add, read:del, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:add, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= cr, write:add, read:xxx, close:add */
+       { 0, 255 },
+       /* old= cr, write:add, read:xxx, close:del */
+       { 0, 255 },
+       /* old= cr, write:add, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:del, read:  0, close:  0 */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:del, read:  0, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:del, read:  0, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old= cr, write:del, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:del, read:add, close:  0 */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:del, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:del, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old= cr, write:del, read:add, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:del, read:del, close:  0 */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:del, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cr, write:del, read:del, close:del */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old= cr, write:del, read:del, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:del, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= cr, write:del, read:xxx, close:add */
+       { 0, 255 },
+       /* old= cr, write:del, read:xxx, close:del */
+       { 0, 255 },
+       /* old= cr, write:del, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:  0, close:  0 */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:  0, close:add */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:  0, close:del */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:add, close:  0 */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:add, close:add */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:add, close:del */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:add, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:del, close:  0 */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:del, close:add */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:del, close:del */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:del, close:xxx */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:xxx, close:add */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:xxx, close:del */
+       { 0, 255 },
+       /* old= cr, write:xxx, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:  0, read:  0, close:  0 */
+       { 0, 0 },
+       /* old= cw, write:  0, read:  0, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:  0, read:  0, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= cw, write:  0, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:  0, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:  0, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:  0, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= cw, write:  0, read:add, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:  0, read:del, close:  0 */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:  0, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:  0, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= cw, write:  0, read:del, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:  0, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= cw, write:  0, read:xxx, close:add */
+       { 0, 255 },
+       /* old= cw, write:  0, read:xxx, close:del */
+       { 0, 255 },
+       /* old= cw, write:  0, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:add, read:  0, close:  0 */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:add, read:  0, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:add, read:  0, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= cw, write:add, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:add, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:add, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:add, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= cw, write:add, read:add, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:add, read:del, close:  0 */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:add, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:add, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old= cw, write:add, read:del, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:add, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= cw, write:add, read:xxx, close:add */
+       { 0, 255 },
+       /* old= cw, write:add, read:xxx, close:del */
+       { 0, 255 },
+       /* old= cw, write:add, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:del, read:  0, close:  0 */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:del, read:  0, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:del, read:  0, close:del */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old= cw, write:del, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:del, read:add, close:  0 */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:del, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:del, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old= cw, write:del, read:add, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:del, read:del, close:  0 */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:del, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old= cw, write:del, read:del, close:del */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old= cw, write:del, read:del, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:del, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= cw, write:del, read:xxx, close:add */
+       { 0, 255 },
+       /* old= cw, write:del, read:xxx, close:del */
+       { 0, 255 },
+       /* old= cw, write:del, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:  0, close:  0 */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:  0, close:add */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:  0, close:del */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:  0, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:add, close:  0 */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:add, close:add */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:add, close:del */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:add, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:del, close:  0 */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:del, close:add */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:del, close:del */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:del, close:xxx */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:xxx, close:add */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:xxx, close:del */
+       { 0, 255 },
+       /* old= cw, write:xxx, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:  0, read:  0, close:  0 */
+       { 0, 0 },
+       /* old=crw, write:  0, read:  0, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:  0, read:  0, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=crw, write:  0, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:  0, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:  0, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:  0, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=crw, write:  0, read:add, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:  0, read:del, close:  0 */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:  0, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:  0, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=crw, write:  0, read:del, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:  0, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=crw, write:  0, read:xxx, close:add */
+       { 0, 255 },
+       /* old=crw, write:  0, read:xxx, close:del */
+       { 0, 255 },
+       /* old=crw, write:  0, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:add, read:  0, close:  0 */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:add, read:  0, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:add, read:  0, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=crw, write:add, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:add, read:add, close:  0 */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:add, read:add, close:add */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:add, read:add, close:del */
+       { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=crw, write:add, read:add, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:add, read:del, close:  0 */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:add, read:del, close:add */
+       { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:add, read:del, close:del */
+       { EPOLLOUT, EPOLL_CTL_MOD },
+       /* old=crw, write:add, read:del, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:add, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=crw, write:add, read:xxx, close:add */
+       { 0, 255 },
+       /* old=crw, write:add, read:xxx, close:del */
+       { 0, 255 },
+       /* old=crw, write:add, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:del, read:  0, close:  0 */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:del, read:  0, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:del, read:  0, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=crw, write:del, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:del, read:add, close:  0 */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:del, read:add, close:add */
+       { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:del, read:add, close:del */
+       { EPOLLIN, EPOLL_CTL_MOD },
+       /* old=crw, write:del, read:add, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:del, read:del, close:  0 */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:del, read:del, close:add */
+       { EPOLLRDHUP, EPOLL_CTL_MOD },
+       /* old=crw, write:del, read:del, close:del */
+       { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
+       /* old=crw, write:del, read:del, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:del, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=crw, write:del, read:xxx, close:add */
+       { 0, 255 },
+       /* old=crw, write:del, read:xxx, close:del */
+       { 0, 255 },
+       /* old=crw, write:del, read:xxx, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:  0, close:  0 */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:  0, close:add */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:  0, close:del */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:  0, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:add, close:  0 */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:add, close:add */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:add, close:del */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:add, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:del, close:  0 */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:del, close:add */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:del, close:del */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:del, close:xxx */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:xxx, close:  0 */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:xxx, close:add */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:xxx, close:del */
+       { 0, 255 },
+       /* old=crw, write:xxx, read:xxx, close:xxx */
+       { 0, 255 },
+};
+
+#endif