143ffcf69SNick Mathewson /*
243ffcf69SNick Mathewson  * Copyright (c) 2000-2007 Niels Provos <[email protected]>
343ffcf69SNick Mathewson  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
443ffcf69SNick Mathewson  *
543ffcf69SNick Mathewson  * Redistribution and use in source and binary forms, with or without
643ffcf69SNick Mathewson  * modification, are permitted provided that the following conditions
743ffcf69SNick Mathewson  * are met:
843ffcf69SNick Mathewson  * 1. Redistributions of source code must retain the above copyright
943ffcf69SNick Mathewson  *    notice, this list of conditions and the following disclaimer.
1043ffcf69SNick Mathewson  * 2. Redistributions in binary form must reproduce the above copyright
1143ffcf69SNick Mathewson  *    notice, this list of conditions and the following disclaimer in the
1243ffcf69SNick Mathewson  *    documentation and/or other materials provided with the distribution.
1343ffcf69SNick Mathewson  * 3. The name of the author may not be used to endorse or promote products
1443ffcf69SNick Mathewson  *    derived from this software without specific prior written permission.
1543ffcf69SNick Mathewson  *
1643ffcf69SNick Mathewson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1743ffcf69SNick Mathewson  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1843ffcf69SNick Mathewson  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1943ffcf69SNick Mathewson  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2043ffcf69SNick Mathewson  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2143ffcf69SNick Mathewson  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2243ffcf69SNick Mathewson  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2343ffcf69SNick Mathewson  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2443ffcf69SNick Mathewson  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2543ffcf69SNick Mathewson  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2643ffcf69SNick Mathewson  */
2743ffcf69SNick Mathewson #ifndef EPOLLTABLE_INTERNAL_H_INCLUDED_
2843ffcf69SNick Mathewson #define EPOLLTABLE_INTERNAL_H_INCLUDED_
2943ffcf69SNick Mathewson 
3043ffcf69SNick Mathewson /*
3143ffcf69SNick Mathewson   Here are the values we're masking off to decide what operations to do.
3243ffcf69SNick Mathewson   Note that since EV_READ|EV_WRITE.
3343ffcf69SNick Mathewson 
3443ffcf69SNick Mathewson   Note also that this table is a little sparse, since ADD+DEL is
3543ffcf69SNick Mathewson   nonsensical ("xxx" in the list below.)
3643ffcf69SNick Mathewson 
37*339f76c0Sbaixiangcpp   Note also that we are shifting old_events by only 5 bits, since
3843ffcf69SNick Mathewson   EV_READ is 2 and EV_WRITE is 4.
3943ffcf69SNick Mathewson 
4043ffcf69SNick Mathewson   The table was auto-generated with a python script, according to this
4143ffcf69SNick Mathewson   pseudocode:[*0]
4243ffcf69SNick Mathewson 
4343ffcf69SNick Mathewson       If either the read or the write change is add+del:
4443ffcf69SNick Mathewson 	 This is impossible; Set op==-1, events=0.
4543ffcf69SNick Mathewson       Else, if either the read or the write change is add:
4643ffcf69SNick Mathewson 	 Set events to 0.
4743ffcf69SNick Mathewson 	 If the read change is add, or
4843ffcf69SNick Mathewson 	    (the read change is not del, and ev_read is in old_events):
4943ffcf69SNick Mathewson 	       Add EPOLLIN to events.
5043ffcf69SNick Mathewson 	 If the write change is add, or
5143ffcf69SNick Mathewson 	    (the write change is not del, and ev_write is in old_events):
5243ffcf69SNick Mathewson 	       Add EPOLLOUT to events.
5343ffcf69SNick Mathewson 
5443ffcf69SNick Mathewson 	 If old_events is set:
5543ffcf69SNick Mathewson 	       Set op to EPOLL_CTL_MOD [*1,*2]
5643ffcf69SNick Mathewson 	Else:
5743ffcf69SNick Mathewson 	       Set op to EPOLL_CTL_ADD [*3]
5843ffcf69SNick Mathewson 
5943ffcf69SNick Mathewson       Else, if the read or the write change is del:
6043ffcf69SNick Mathewson 	 Set op to EPOLL_CTL_DEL.
6143ffcf69SNick Mathewson 	 If the read change is del:
6243ffcf69SNick Mathewson 	     If the write change is del:
6343ffcf69SNick Mathewson 		 Set events to EPOLLIN|EPOLLOUT
6443ffcf69SNick Mathewson 	     Else if ev_write is in old_events:
6543ffcf69SNick Mathewson 		 Set events to EPOLLOUT
6643ffcf69SNick Mathewson 		Set op to EPOLL_CTL_MOD
6743ffcf69SNick Mathewson 	     Else
6843ffcf69SNick Mathewson 		 Set events to EPOLLIN
6943ffcf69SNick Mathewson 	 Else:
7043ffcf69SNick Mathewson 	     {The write change is del.}
7143ffcf69SNick Mathewson 	    If ev_read is in old_events:
7243ffcf69SNick Mathewson 		 Set events to EPOLLIN
7343ffcf69SNick Mathewson 		Set op to EPOLL_CTL_MOD
7443ffcf69SNick Mathewson 	    Else:
7543ffcf69SNick Mathewson 		Set the events to EPOLLOUT
7643ffcf69SNick Mathewson 
7743ffcf69SNick Mathewson       Else:
7843ffcf69SNick Mathewson 	   There is no read or write change; set op to 0 and events to 0.
7943ffcf69SNick Mathewson 
8043ffcf69SNick Mathewson       The logic is a little tricky, since we had no events set on the fd before,
8143ffcf69SNick Mathewson       we need to set op="ADD" and set events=the events we want to add.	 If we
8243ffcf69SNick Mathewson       had any events set on the fd before, and we want any events to remain on
8343ffcf69SNick Mathewson       the fd, we need to say op="MOD" and set events=the events we want to
8443ffcf69SNick Mathewson       remain.  But if we want to delete the last event, we say op="DEL" and
8543ffcf69SNick Mathewson       set events=(any non-null pointer).
8643ffcf69SNick Mathewson 
8743ffcf69SNick Mathewson   [*0] Actually, the Python script has gotten a bit more complicated, to
8843ffcf69SNick Mathewson        support EPOLLRDHUP.
8943ffcf69SNick Mathewson 
9043ffcf69SNick Mathewson   [*1] This MOD is only a guess.  MOD might fail with ENOENT if the file was
9143ffcf69SNick Mathewson        closed and a new file was opened with the same fd.  If so, we'll retry
9243ffcf69SNick Mathewson        with ADD.
9343ffcf69SNick Mathewson 
9443ffcf69SNick Mathewson   [*2] We can't replace this with a no-op even if old_events is the same as
9543ffcf69SNick Mathewson        the new events: if the file was closed and reopened, we need to retry
9643ffcf69SNick Mathewson        with an ADD.  (We do a MOD in this case since "no change" is more
9743ffcf69SNick Mathewson        common than "close and reopen", so we'll usually wind up doing 1
9843ffcf69SNick Mathewson        syscalls instead of 2.)
9943ffcf69SNick Mathewson 
10043ffcf69SNick Mathewson   [*3] This ADD is only a guess.  There is a fun Linux kernel issue where if
10143ffcf69SNick Mathewson        you have two fds for the same file (via dup) and you ADD one to an
10243ffcf69SNick Mathewson        epfd, then close it, then re-create it with the same fd (via dup2 or an
10343ffcf69SNick Mathewson        unlucky dup), then try to ADD it again, you'll get an EEXIST, since the
10443ffcf69SNick Mathewson        struct epitem is not actually removed from the struct eventpoll until
10543ffcf69SNick Mathewson        the file itself is closed.
10643ffcf69SNick Mathewson 
10743ffcf69SNick Mathewson   EV_CHANGE_ADD==1
10843ffcf69SNick Mathewson   EV_CHANGE_DEL==2
10943ffcf69SNick Mathewson   EV_READ      ==2
11043ffcf69SNick Mathewson   EV_WRITE     ==4
11143ffcf69SNick Mathewson   EV_CLOSED    ==0x80
11243ffcf69SNick Mathewson 
11343ffcf69SNick Mathewson   Bit 0: close change is add
11443ffcf69SNick Mathewson   Bit 1: close change is del
11543ffcf69SNick Mathewson   Bit 2: read change is add
11643ffcf69SNick Mathewson   Bit 3: read change is del
11743ffcf69SNick Mathewson   Bit 4: write change is add
11843ffcf69SNick Mathewson   Bit 5: write change is del
11943ffcf69SNick Mathewson   Bit 6: old events had EV_READ
12043ffcf69SNick Mathewson   Bit 7: old events had EV_WRITE
12143ffcf69SNick Mathewson   Bit 8: old events had EV_CLOSED
12243ffcf69SNick Mathewson */
12343ffcf69SNick Mathewson 
12443ffcf69SNick Mathewson #define EPOLL_OP_TABLE_INDEX(c) \
12543ffcf69SNick Mathewson 	(   (((c)->close_change&(EV_CHANGE_ADD|EV_CHANGE_DEL))) |		\
12643ffcf69SNick Mathewson 	    (((c)->read_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 2) |	\
12743ffcf69SNick Mathewson 	    (((c)->write_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 4) |	\
12843ffcf69SNick Mathewson 	    (((c)->old_events&(EV_READ|EV_WRITE)) << 5) |		\
12943ffcf69SNick Mathewson 	    (((c)->old_events&(EV_CLOSED)) << 1)				\
13043ffcf69SNick Mathewson 	    )
13143ffcf69SNick Mathewson 
13243ffcf69SNick Mathewson #if EV_READ != 2 || EV_WRITE != 4 || EV_CLOSED != 0x80 || EV_CHANGE_ADD != 1 || EV_CHANGE_DEL != 2
13343ffcf69SNick Mathewson #error "Libevent's internals changed!  Regenerate the op_table in epolltable-internal.h"
13443ffcf69SNick Mathewson #endif
13543ffcf69SNick Mathewson 
13643ffcf69SNick Mathewson static const struct operation {
13743ffcf69SNick Mathewson 	int events;
13843ffcf69SNick Mathewson 	int op;
13943ffcf69SNick Mathewson } epoll_op_table[] = {
14043ffcf69SNick Mathewson 	/* old=  0, write:  0, read:  0, close:  0 */
14143ffcf69SNick Mathewson 	{ 0, 0 },
14243ffcf69SNick Mathewson 	/* old=  0, write:  0, read:  0, close:add */
14343ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_ADD },
14443ffcf69SNick Mathewson 	/* old=  0, write:  0, read:  0, close:del */
14543ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_DEL },
14643ffcf69SNick Mathewson 	/* old=  0, write:  0, read:  0, close:xxx */
14743ffcf69SNick Mathewson 	{ 0, 255 },
14843ffcf69SNick Mathewson 	/* old=  0, write:  0, read:add, close:  0 */
14943ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_ADD },
15043ffcf69SNick Mathewson 	/* old=  0, write:  0, read:add, close:add */
15143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
15243ffcf69SNick Mathewson 	/* old=  0, write:  0, read:add, close:del */
15343ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_ADD },
15443ffcf69SNick Mathewson 	/* old=  0, write:  0, read:add, close:xxx */
15543ffcf69SNick Mathewson 	{ 0, 255 },
15643ffcf69SNick Mathewson 	/* old=  0, write:  0, read:del, close:  0 */
15743ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_DEL },
15843ffcf69SNick Mathewson 	/* old=  0, write:  0, read:del, close:add */
15943ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_ADD },
16043ffcf69SNick Mathewson 	/* old=  0, write:  0, read:del, close:del */
16143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
16243ffcf69SNick Mathewson 	/* old=  0, write:  0, read:del, close:xxx */
16343ffcf69SNick Mathewson 	{ 0, 255 },
16443ffcf69SNick Mathewson 	/* old=  0, write:  0, read:xxx, close:  0 */
16543ffcf69SNick Mathewson 	{ 0, 255 },
16643ffcf69SNick Mathewson 	/* old=  0, write:  0, read:xxx, close:add */
16743ffcf69SNick Mathewson 	{ 0, 255 },
16843ffcf69SNick Mathewson 	/* old=  0, write:  0, read:xxx, close:del */
16943ffcf69SNick Mathewson 	{ 0, 255 },
17043ffcf69SNick Mathewson 	/* old=  0, write:  0, read:xxx, close:xxx */
17143ffcf69SNick Mathewson 	{ 0, 255 },
17243ffcf69SNick Mathewson 	/* old=  0, write:add, read:  0, close:  0 */
17343ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_ADD },
17443ffcf69SNick Mathewson 	/* old=  0, write:add, read:  0, close:add */
17543ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
17643ffcf69SNick Mathewson 	/* old=  0, write:add, read:  0, close:del */
17743ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_ADD },
17843ffcf69SNick Mathewson 	/* old=  0, write:add, read:  0, close:xxx */
17943ffcf69SNick Mathewson 	{ 0, 255 },
18043ffcf69SNick Mathewson 	/* old=  0, write:add, read:add, close:  0 */
18143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
18243ffcf69SNick Mathewson 	/* old=  0, write:add, read:add, close:add */
18343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
18443ffcf69SNick Mathewson 	/* old=  0, write:add, read:add, close:del */
18543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
18643ffcf69SNick Mathewson 	/* old=  0, write:add, read:add, close:xxx */
18743ffcf69SNick Mathewson 	{ 0, 255 },
18843ffcf69SNick Mathewson 	/* old=  0, write:add, read:del, close:  0 */
18943ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_ADD },
19043ffcf69SNick Mathewson 	/* old=  0, write:add, read:del, close:add */
19143ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
19243ffcf69SNick Mathewson 	/* old=  0, write:add, read:del, close:del */
19343ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_ADD },
19443ffcf69SNick Mathewson 	/* old=  0, write:add, read:del, close:xxx */
19543ffcf69SNick Mathewson 	{ 0, 255 },
19643ffcf69SNick Mathewson 	/* old=  0, write:add, read:xxx, close:  0 */
19743ffcf69SNick Mathewson 	{ 0, 255 },
19843ffcf69SNick Mathewson 	/* old=  0, write:add, read:xxx, close:add */
19943ffcf69SNick Mathewson 	{ 0, 255 },
20043ffcf69SNick Mathewson 	/* old=  0, write:add, read:xxx, close:del */
20143ffcf69SNick Mathewson 	{ 0, 255 },
20243ffcf69SNick Mathewson 	/* old=  0, write:add, read:xxx, close:xxx */
20343ffcf69SNick Mathewson 	{ 0, 255 },
20443ffcf69SNick Mathewson 	/* old=  0, write:del, read:  0, close:  0 */
20543ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_DEL },
20643ffcf69SNick Mathewson 	/* old=  0, write:del, read:  0, close:add */
20743ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_ADD },
20843ffcf69SNick Mathewson 	/* old=  0, write:del, read:  0, close:del */
20943ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
21043ffcf69SNick Mathewson 	/* old=  0, write:del, read:  0, close:xxx */
21143ffcf69SNick Mathewson 	{ 0, 255 },
21243ffcf69SNick Mathewson 	/* old=  0, write:del, read:add, close:  0 */
21343ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_ADD },
21443ffcf69SNick Mathewson 	/* old=  0, write:del, read:add, close:add */
21543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
21643ffcf69SNick Mathewson 	/* old=  0, write:del, read:add, close:del */
21743ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_ADD },
21843ffcf69SNick Mathewson 	/* old=  0, write:del, read:add, close:xxx */
21943ffcf69SNick Mathewson 	{ 0, 255 },
22043ffcf69SNick Mathewson 	/* old=  0, write:del, read:del, close:  0 */
22143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
22243ffcf69SNick Mathewson 	/* old=  0, write:del, read:del, close:add */
22343ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_ADD },
22443ffcf69SNick Mathewson 	/* old=  0, write:del, read:del, close:del */
22543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
22643ffcf69SNick Mathewson 	/* old=  0, write:del, read:del, close:xxx */
22743ffcf69SNick Mathewson 	{ 0, 255 },
22843ffcf69SNick Mathewson 	/* old=  0, write:del, read:xxx, close:  0 */
22943ffcf69SNick Mathewson 	{ 0, 255 },
23043ffcf69SNick Mathewson 	/* old=  0, write:del, read:xxx, close:add */
23143ffcf69SNick Mathewson 	{ 0, 255 },
23243ffcf69SNick Mathewson 	/* old=  0, write:del, read:xxx, close:del */
23343ffcf69SNick Mathewson 	{ 0, 255 },
23443ffcf69SNick Mathewson 	/* old=  0, write:del, read:xxx, close:xxx */
23543ffcf69SNick Mathewson 	{ 0, 255 },
23643ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:  0, close:  0 */
23743ffcf69SNick Mathewson 	{ 0, 255 },
23843ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:  0, close:add */
23943ffcf69SNick Mathewson 	{ 0, 255 },
24043ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:  0, close:del */
24143ffcf69SNick Mathewson 	{ 0, 255 },
24243ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:  0, close:xxx */
24343ffcf69SNick Mathewson 	{ 0, 255 },
24443ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:add, close:  0 */
24543ffcf69SNick Mathewson 	{ 0, 255 },
24643ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:add, close:add */
24743ffcf69SNick Mathewson 	{ 0, 255 },
24843ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:add, close:del */
24943ffcf69SNick Mathewson 	{ 0, 255 },
25043ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:add, close:xxx */
25143ffcf69SNick Mathewson 	{ 0, 255 },
25243ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:del, close:  0 */
25343ffcf69SNick Mathewson 	{ 0, 255 },
25443ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:del, close:add */
25543ffcf69SNick Mathewson 	{ 0, 255 },
25643ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:del, close:del */
25743ffcf69SNick Mathewson 	{ 0, 255 },
25843ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:del, close:xxx */
25943ffcf69SNick Mathewson 	{ 0, 255 },
26043ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:xxx, close:  0 */
26143ffcf69SNick Mathewson 	{ 0, 255 },
26243ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:xxx, close:add */
26343ffcf69SNick Mathewson 	{ 0, 255 },
26443ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:xxx, close:del */
26543ffcf69SNick Mathewson 	{ 0, 255 },
26643ffcf69SNick Mathewson 	/* old=  0, write:xxx, read:xxx, close:xxx */
26743ffcf69SNick Mathewson 	{ 0, 255 },
26843ffcf69SNick Mathewson 	/* old=  r, write:  0, read:  0, close:  0 */
26943ffcf69SNick Mathewson 	{ 0, 0 },
27043ffcf69SNick Mathewson 	/* old=  r, write:  0, read:  0, close:add */
27143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
27243ffcf69SNick Mathewson 	/* old=  r, write:  0, read:  0, close:del */
27343ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
27443ffcf69SNick Mathewson 	/* old=  r, write:  0, read:  0, close:xxx */
27543ffcf69SNick Mathewson 	{ 0, 255 },
27643ffcf69SNick Mathewson 	/* old=  r, write:  0, read:add, close:  0 */
27743ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
27843ffcf69SNick Mathewson 	/* old=  r, write:  0, read:add, close:add */
27943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
28043ffcf69SNick Mathewson 	/* old=  r, write:  0, read:add, close:del */
28143ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
28243ffcf69SNick Mathewson 	/* old=  r, write:  0, read:add, close:xxx */
28343ffcf69SNick Mathewson 	{ 0, 255 },
28443ffcf69SNick Mathewson 	/* old=  r, write:  0, read:del, close:  0 */
28543ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_DEL },
28643ffcf69SNick Mathewson 	/* old=  r, write:  0, read:del, close:add */
28743ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
28843ffcf69SNick Mathewson 	/* old=  r, write:  0, read:del, close:del */
28943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
29043ffcf69SNick Mathewson 	/* old=  r, write:  0, read:del, close:xxx */
29143ffcf69SNick Mathewson 	{ 0, 255 },
29243ffcf69SNick Mathewson 	/* old=  r, write:  0, read:xxx, close:  0 */
29343ffcf69SNick Mathewson 	{ 0, 255 },
29443ffcf69SNick Mathewson 	/* old=  r, write:  0, read:xxx, close:add */
29543ffcf69SNick Mathewson 	{ 0, 255 },
29643ffcf69SNick Mathewson 	/* old=  r, write:  0, read:xxx, close:del */
29743ffcf69SNick Mathewson 	{ 0, 255 },
29843ffcf69SNick Mathewson 	/* old=  r, write:  0, read:xxx, close:xxx */
29943ffcf69SNick Mathewson 	{ 0, 255 },
30043ffcf69SNick Mathewson 	/* old=  r, write:add, read:  0, close:  0 */
30143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
30243ffcf69SNick Mathewson 	/* old=  r, write:add, read:  0, close:add */
30343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
30443ffcf69SNick Mathewson 	/* old=  r, write:add, read:  0, close:del */
30543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
30643ffcf69SNick Mathewson 	/* old=  r, write:add, read:  0, close:xxx */
30743ffcf69SNick Mathewson 	{ 0, 255 },
30843ffcf69SNick Mathewson 	/* old=  r, write:add, read:add, close:  0 */
30943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
31043ffcf69SNick Mathewson 	/* old=  r, write:add, read:add, close:add */
31143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
31243ffcf69SNick Mathewson 	/* old=  r, write:add, read:add, close:del */
31343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
31443ffcf69SNick Mathewson 	/* old=  r, write:add, read:add, close:xxx */
31543ffcf69SNick Mathewson 	{ 0, 255 },
31643ffcf69SNick Mathewson 	/* old=  r, write:add, read:del, close:  0 */
31743ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
31843ffcf69SNick Mathewson 	/* old=  r, write:add, read:del, close:add */
31943ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
32043ffcf69SNick Mathewson 	/* old=  r, write:add, read:del, close:del */
32143ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
32243ffcf69SNick Mathewson 	/* old=  r, write:add, read:del, close:xxx */
32343ffcf69SNick Mathewson 	{ 0, 255 },
32443ffcf69SNick Mathewson 	/* old=  r, write:add, read:xxx, close:  0 */
32543ffcf69SNick Mathewson 	{ 0, 255 },
32643ffcf69SNick Mathewson 	/* old=  r, write:add, read:xxx, close:add */
32743ffcf69SNick Mathewson 	{ 0, 255 },
32843ffcf69SNick Mathewson 	/* old=  r, write:add, read:xxx, close:del */
32943ffcf69SNick Mathewson 	{ 0, 255 },
33043ffcf69SNick Mathewson 	/* old=  r, write:add, read:xxx, close:xxx */
33143ffcf69SNick Mathewson 	{ 0, 255 },
33243ffcf69SNick Mathewson 	/* old=  r, write:del, read:  0, close:  0 */
33343ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
33443ffcf69SNick Mathewson 	/* old=  r, write:del, read:  0, close:add */
33543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
33643ffcf69SNick Mathewson 	/* old=  r, write:del, read:  0, close:del */
33743ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
33843ffcf69SNick Mathewson 	/* old=  r, write:del, read:  0, close:xxx */
33943ffcf69SNick Mathewson 	{ 0, 255 },
34043ffcf69SNick Mathewson 	/* old=  r, write:del, read:add, close:  0 */
34143ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
34243ffcf69SNick Mathewson 	/* old=  r, write:del, read:add, close:add */
34343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
34443ffcf69SNick Mathewson 	/* old=  r, write:del, read:add, close:del */
34543ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
34643ffcf69SNick Mathewson 	/* old=  r, write:del, read:add, close:xxx */
34743ffcf69SNick Mathewson 	{ 0, 255 },
34843ffcf69SNick Mathewson 	/* old=  r, write:del, read:del, close:  0 */
34943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
35043ffcf69SNick Mathewson 	/* old=  r, write:del, read:del, close:add */
35143ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
35243ffcf69SNick Mathewson 	/* old=  r, write:del, read:del, close:del */
35343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
35443ffcf69SNick Mathewson 	/* old=  r, write:del, read:del, close:xxx */
35543ffcf69SNick Mathewson 	{ 0, 255 },
35643ffcf69SNick Mathewson 	/* old=  r, write:del, read:xxx, close:  0 */
35743ffcf69SNick Mathewson 	{ 0, 255 },
35843ffcf69SNick Mathewson 	/* old=  r, write:del, read:xxx, close:add */
35943ffcf69SNick Mathewson 	{ 0, 255 },
36043ffcf69SNick Mathewson 	/* old=  r, write:del, read:xxx, close:del */
36143ffcf69SNick Mathewson 	{ 0, 255 },
36243ffcf69SNick Mathewson 	/* old=  r, write:del, read:xxx, close:xxx */
36343ffcf69SNick Mathewson 	{ 0, 255 },
36443ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:  0, close:  0 */
36543ffcf69SNick Mathewson 	{ 0, 255 },
36643ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:  0, close:add */
36743ffcf69SNick Mathewson 	{ 0, 255 },
36843ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:  0, close:del */
36943ffcf69SNick Mathewson 	{ 0, 255 },
37043ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:  0, close:xxx */
37143ffcf69SNick Mathewson 	{ 0, 255 },
37243ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:add, close:  0 */
37343ffcf69SNick Mathewson 	{ 0, 255 },
37443ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:add, close:add */
37543ffcf69SNick Mathewson 	{ 0, 255 },
37643ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:add, close:del */
37743ffcf69SNick Mathewson 	{ 0, 255 },
37843ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:add, close:xxx */
37943ffcf69SNick Mathewson 	{ 0, 255 },
38043ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:del, close:  0 */
38143ffcf69SNick Mathewson 	{ 0, 255 },
38243ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:del, close:add */
38343ffcf69SNick Mathewson 	{ 0, 255 },
38443ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:del, close:del */
38543ffcf69SNick Mathewson 	{ 0, 255 },
38643ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:del, close:xxx */
38743ffcf69SNick Mathewson 	{ 0, 255 },
38843ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:xxx, close:  0 */
38943ffcf69SNick Mathewson 	{ 0, 255 },
39043ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:xxx, close:add */
39143ffcf69SNick Mathewson 	{ 0, 255 },
39243ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:xxx, close:del */
39343ffcf69SNick Mathewson 	{ 0, 255 },
39443ffcf69SNick Mathewson 	/* old=  r, write:xxx, read:xxx, close:xxx */
39543ffcf69SNick Mathewson 	{ 0, 255 },
39643ffcf69SNick Mathewson 	/* old=  w, write:  0, read:  0, close:  0 */
39743ffcf69SNick Mathewson 	{ 0, 0 },
39843ffcf69SNick Mathewson 	/* old=  w, write:  0, read:  0, close:add */
39943ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
40043ffcf69SNick Mathewson 	/* old=  w, write:  0, read:  0, close:del */
40143ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
40243ffcf69SNick Mathewson 	/* old=  w, write:  0, read:  0, close:xxx */
40343ffcf69SNick Mathewson 	{ 0, 255 },
40443ffcf69SNick Mathewson 	/* old=  w, write:  0, read:add, close:  0 */
40543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
40643ffcf69SNick Mathewson 	/* old=  w, write:  0, read:add, close:add */
40743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
40843ffcf69SNick Mathewson 	/* old=  w, write:  0, read:add, close:del */
40943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
41043ffcf69SNick Mathewson 	/* old=  w, write:  0, read:add, close:xxx */
41143ffcf69SNick Mathewson 	{ 0, 255 },
41243ffcf69SNick Mathewson 	/* old=  w, write:  0, read:del, close:  0 */
41343ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
41443ffcf69SNick Mathewson 	/* old=  w, write:  0, read:del, close:add */
41543ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
41643ffcf69SNick Mathewson 	/* old=  w, write:  0, read:del, close:del */
41743ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
41843ffcf69SNick Mathewson 	/* old=  w, write:  0, read:del, close:xxx */
41943ffcf69SNick Mathewson 	{ 0, 255 },
42043ffcf69SNick Mathewson 	/* old=  w, write:  0, read:xxx, close:  0 */
42143ffcf69SNick Mathewson 	{ 0, 255 },
42243ffcf69SNick Mathewson 	/* old=  w, write:  0, read:xxx, close:add */
42343ffcf69SNick Mathewson 	{ 0, 255 },
42443ffcf69SNick Mathewson 	/* old=  w, write:  0, read:xxx, close:del */
42543ffcf69SNick Mathewson 	{ 0, 255 },
42643ffcf69SNick Mathewson 	/* old=  w, write:  0, read:xxx, close:xxx */
42743ffcf69SNick Mathewson 	{ 0, 255 },
42843ffcf69SNick Mathewson 	/* old=  w, write:add, read:  0, close:  0 */
42943ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
43043ffcf69SNick Mathewson 	/* old=  w, write:add, read:  0, close:add */
43143ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
43243ffcf69SNick Mathewson 	/* old=  w, write:add, read:  0, close:del */
43343ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
43443ffcf69SNick Mathewson 	/* old=  w, write:add, read:  0, close:xxx */
43543ffcf69SNick Mathewson 	{ 0, 255 },
43643ffcf69SNick Mathewson 	/* old=  w, write:add, read:add, close:  0 */
43743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
43843ffcf69SNick Mathewson 	/* old=  w, write:add, read:add, close:add */
43943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
44043ffcf69SNick Mathewson 	/* old=  w, write:add, read:add, close:del */
44143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
44243ffcf69SNick Mathewson 	/* old=  w, write:add, read:add, close:xxx */
44343ffcf69SNick Mathewson 	{ 0, 255 },
44443ffcf69SNick Mathewson 	/* old=  w, write:add, read:del, close:  0 */
44543ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
44643ffcf69SNick Mathewson 	/* old=  w, write:add, read:del, close:add */
44743ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
44843ffcf69SNick Mathewson 	/* old=  w, write:add, read:del, close:del */
44943ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
45043ffcf69SNick Mathewson 	/* old=  w, write:add, read:del, close:xxx */
45143ffcf69SNick Mathewson 	{ 0, 255 },
45243ffcf69SNick Mathewson 	/* old=  w, write:add, read:xxx, close:  0 */
45343ffcf69SNick Mathewson 	{ 0, 255 },
45443ffcf69SNick Mathewson 	/* old=  w, write:add, read:xxx, close:add */
45543ffcf69SNick Mathewson 	{ 0, 255 },
45643ffcf69SNick Mathewson 	/* old=  w, write:add, read:xxx, close:del */
45743ffcf69SNick Mathewson 	{ 0, 255 },
45843ffcf69SNick Mathewson 	/* old=  w, write:add, read:xxx, close:xxx */
45943ffcf69SNick Mathewson 	{ 0, 255 },
46043ffcf69SNick Mathewson 	/* old=  w, write:del, read:  0, close:  0 */
46143ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_DEL },
46243ffcf69SNick Mathewson 	/* old=  w, write:del, read:  0, close:add */
46343ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
46443ffcf69SNick Mathewson 	/* old=  w, write:del, read:  0, close:del */
46543ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
46643ffcf69SNick Mathewson 	/* old=  w, write:del, read:  0, close:xxx */
46743ffcf69SNick Mathewson 	{ 0, 255 },
46843ffcf69SNick Mathewson 	/* old=  w, write:del, read:add, close:  0 */
46943ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
47043ffcf69SNick Mathewson 	/* old=  w, write:del, read:add, close:add */
47143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
47243ffcf69SNick Mathewson 	/* old=  w, write:del, read:add, close:del */
47343ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
47443ffcf69SNick Mathewson 	/* old=  w, write:del, read:add, close:xxx */
47543ffcf69SNick Mathewson 	{ 0, 255 },
47643ffcf69SNick Mathewson 	/* old=  w, write:del, read:del, close:  0 */
47743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
47843ffcf69SNick Mathewson 	/* old=  w, write:del, read:del, close:add */
47943ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
48043ffcf69SNick Mathewson 	/* old=  w, write:del, read:del, close:del */
48143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
48243ffcf69SNick Mathewson 	/* old=  w, write:del, read:del, close:xxx */
48343ffcf69SNick Mathewson 	{ 0, 255 },
48443ffcf69SNick Mathewson 	/* old=  w, write:del, read:xxx, close:  0 */
48543ffcf69SNick Mathewson 	{ 0, 255 },
48643ffcf69SNick Mathewson 	/* old=  w, write:del, read:xxx, close:add */
48743ffcf69SNick Mathewson 	{ 0, 255 },
48843ffcf69SNick Mathewson 	/* old=  w, write:del, read:xxx, close:del */
48943ffcf69SNick Mathewson 	{ 0, 255 },
49043ffcf69SNick Mathewson 	/* old=  w, write:del, read:xxx, close:xxx */
49143ffcf69SNick Mathewson 	{ 0, 255 },
49243ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:  0, close:  0 */
49343ffcf69SNick Mathewson 	{ 0, 255 },
49443ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:  0, close:add */
49543ffcf69SNick Mathewson 	{ 0, 255 },
49643ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:  0, close:del */
49743ffcf69SNick Mathewson 	{ 0, 255 },
49843ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:  0, close:xxx */
49943ffcf69SNick Mathewson 	{ 0, 255 },
50043ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:add, close:  0 */
50143ffcf69SNick Mathewson 	{ 0, 255 },
50243ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:add, close:add */
50343ffcf69SNick Mathewson 	{ 0, 255 },
50443ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:add, close:del */
50543ffcf69SNick Mathewson 	{ 0, 255 },
50643ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:add, close:xxx */
50743ffcf69SNick Mathewson 	{ 0, 255 },
50843ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:del, close:  0 */
50943ffcf69SNick Mathewson 	{ 0, 255 },
51043ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:del, close:add */
51143ffcf69SNick Mathewson 	{ 0, 255 },
51243ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:del, close:del */
51343ffcf69SNick Mathewson 	{ 0, 255 },
51443ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:del, close:xxx */
51543ffcf69SNick Mathewson 	{ 0, 255 },
51643ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:xxx, close:  0 */
51743ffcf69SNick Mathewson 	{ 0, 255 },
51843ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:xxx, close:add */
51943ffcf69SNick Mathewson 	{ 0, 255 },
52043ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:xxx, close:del */
52143ffcf69SNick Mathewson 	{ 0, 255 },
52243ffcf69SNick Mathewson 	/* old=  w, write:xxx, read:xxx, close:xxx */
52343ffcf69SNick Mathewson 	{ 0, 255 },
52443ffcf69SNick Mathewson 	/* old= rw, write:  0, read:  0, close:  0 */
52543ffcf69SNick Mathewson 	{ 0, 0 },
52643ffcf69SNick Mathewson 	/* old= rw, write:  0, read:  0, close:add */
52743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
52843ffcf69SNick Mathewson 	/* old= rw, write:  0, read:  0, close:del */
52943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
53043ffcf69SNick Mathewson 	/* old= rw, write:  0, read:  0, close:xxx */
53143ffcf69SNick Mathewson 	{ 0, 255 },
53243ffcf69SNick Mathewson 	/* old= rw, write:  0, read:add, close:  0 */
53343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
53443ffcf69SNick Mathewson 	/* old= rw, write:  0, read:add, close:add */
53543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
53643ffcf69SNick Mathewson 	/* old= rw, write:  0, read:add, close:del */
53743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
53843ffcf69SNick Mathewson 	/* old= rw, write:  0, read:add, close:xxx */
53943ffcf69SNick Mathewson 	{ 0, 255 },
54043ffcf69SNick Mathewson 	/* old= rw, write:  0, read:del, close:  0 */
54143ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
54243ffcf69SNick Mathewson 	/* old= rw, write:  0, read:del, close:add */
54343ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
54443ffcf69SNick Mathewson 	/* old= rw, write:  0, read:del, close:del */
54543ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
54643ffcf69SNick Mathewson 	/* old= rw, write:  0, read:del, close:xxx */
54743ffcf69SNick Mathewson 	{ 0, 255 },
54843ffcf69SNick Mathewson 	/* old= rw, write:  0, read:xxx, close:  0 */
54943ffcf69SNick Mathewson 	{ 0, 255 },
55043ffcf69SNick Mathewson 	/* old= rw, write:  0, read:xxx, close:add */
55143ffcf69SNick Mathewson 	{ 0, 255 },
55243ffcf69SNick Mathewson 	/* old= rw, write:  0, read:xxx, close:del */
55343ffcf69SNick Mathewson 	{ 0, 255 },
55443ffcf69SNick Mathewson 	/* old= rw, write:  0, read:xxx, close:xxx */
55543ffcf69SNick Mathewson 	{ 0, 255 },
55643ffcf69SNick Mathewson 	/* old= rw, write:add, read:  0, close:  0 */
55743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
55843ffcf69SNick Mathewson 	/* old= rw, write:add, read:  0, close:add */
55943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
56043ffcf69SNick Mathewson 	/* old= rw, write:add, read:  0, close:del */
56143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
56243ffcf69SNick Mathewson 	/* old= rw, write:add, read:  0, close:xxx */
56343ffcf69SNick Mathewson 	{ 0, 255 },
56443ffcf69SNick Mathewson 	/* old= rw, write:add, read:add, close:  0 */
56543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
56643ffcf69SNick Mathewson 	/* old= rw, write:add, read:add, close:add */
56743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
56843ffcf69SNick Mathewson 	/* old= rw, write:add, read:add, close:del */
56943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
57043ffcf69SNick Mathewson 	/* old= rw, write:add, read:add, close:xxx */
57143ffcf69SNick Mathewson 	{ 0, 255 },
57243ffcf69SNick Mathewson 	/* old= rw, write:add, read:del, close:  0 */
57343ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
57443ffcf69SNick Mathewson 	/* old= rw, write:add, read:del, close:add */
57543ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
57643ffcf69SNick Mathewson 	/* old= rw, write:add, read:del, close:del */
57743ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
57843ffcf69SNick Mathewson 	/* old= rw, write:add, read:del, close:xxx */
57943ffcf69SNick Mathewson 	{ 0, 255 },
58043ffcf69SNick Mathewson 	/* old= rw, write:add, read:xxx, close:  0 */
58143ffcf69SNick Mathewson 	{ 0, 255 },
58243ffcf69SNick Mathewson 	/* old= rw, write:add, read:xxx, close:add */
58343ffcf69SNick Mathewson 	{ 0, 255 },
58443ffcf69SNick Mathewson 	/* old= rw, write:add, read:xxx, close:del */
58543ffcf69SNick Mathewson 	{ 0, 255 },
58643ffcf69SNick Mathewson 	/* old= rw, write:add, read:xxx, close:xxx */
58743ffcf69SNick Mathewson 	{ 0, 255 },
58843ffcf69SNick Mathewson 	/* old= rw, write:del, read:  0, close:  0 */
58943ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
59043ffcf69SNick Mathewson 	/* old= rw, write:del, read:  0, close:add */
59143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
59243ffcf69SNick Mathewson 	/* old= rw, write:del, read:  0, close:del */
59343ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
59443ffcf69SNick Mathewson 	/* old= rw, write:del, read:  0, close:xxx */
59543ffcf69SNick Mathewson 	{ 0, 255 },
59643ffcf69SNick Mathewson 	/* old= rw, write:del, read:add, close:  0 */
59743ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
59843ffcf69SNick Mathewson 	/* old= rw, write:del, read:add, close:add */
59943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
60043ffcf69SNick Mathewson 	/* old= rw, write:del, read:add, close:del */
60143ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
60243ffcf69SNick Mathewson 	/* old= rw, write:del, read:add, close:xxx */
60343ffcf69SNick Mathewson 	{ 0, 255 },
60443ffcf69SNick Mathewson 	/* old= rw, write:del, read:del, close:  0 */
60543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
60643ffcf69SNick Mathewson 	/* old= rw, write:del, read:del, close:add */
60743ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
60843ffcf69SNick Mathewson 	/* old= rw, write:del, read:del, close:del */
60943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
61043ffcf69SNick Mathewson 	/* old= rw, write:del, read:del, close:xxx */
61143ffcf69SNick Mathewson 	{ 0, 255 },
61243ffcf69SNick Mathewson 	/* old= rw, write:del, read:xxx, close:  0 */
61343ffcf69SNick Mathewson 	{ 0, 255 },
61443ffcf69SNick Mathewson 	/* old= rw, write:del, read:xxx, close:add */
61543ffcf69SNick Mathewson 	{ 0, 255 },
61643ffcf69SNick Mathewson 	/* old= rw, write:del, read:xxx, close:del */
61743ffcf69SNick Mathewson 	{ 0, 255 },
61843ffcf69SNick Mathewson 	/* old= rw, write:del, read:xxx, close:xxx */
61943ffcf69SNick Mathewson 	{ 0, 255 },
62043ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:  0, close:  0 */
62143ffcf69SNick Mathewson 	{ 0, 255 },
62243ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:  0, close:add */
62343ffcf69SNick Mathewson 	{ 0, 255 },
62443ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:  0, close:del */
62543ffcf69SNick Mathewson 	{ 0, 255 },
62643ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:  0, close:xxx */
62743ffcf69SNick Mathewson 	{ 0, 255 },
62843ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:add, close:  0 */
62943ffcf69SNick Mathewson 	{ 0, 255 },
63043ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:add, close:add */
63143ffcf69SNick Mathewson 	{ 0, 255 },
63243ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:add, close:del */
63343ffcf69SNick Mathewson 	{ 0, 255 },
63443ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:add, close:xxx */
63543ffcf69SNick Mathewson 	{ 0, 255 },
63643ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:del, close:  0 */
63743ffcf69SNick Mathewson 	{ 0, 255 },
63843ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:del, close:add */
63943ffcf69SNick Mathewson 	{ 0, 255 },
64043ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:del, close:del */
64143ffcf69SNick Mathewson 	{ 0, 255 },
64243ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:del, close:xxx */
64343ffcf69SNick Mathewson 	{ 0, 255 },
64443ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:xxx, close:  0 */
64543ffcf69SNick Mathewson 	{ 0, 255 },
64643ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:xxx, close:add */
64743ffcf69SNick Mathewson 	{ 0, 255 },
64843ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:xxx, close:del */
64943ffcf69SNick Mathewson 	{ 0, 255 },
65043ffcf69SNick Mathewson 	/* old= rw, write:xxx, read:xxx, close:xxx */
65143ffcf69SNick Mathewson 	{ 0, 255 },
65243ffcf69SNick Mathewson 	/* old=  c, write:  0, read:  0, close:  0 */
65343ffcf69SNick Mathewson 	{ 0, 0 },
65443ffcf69SNick Mathewson 	/* old=  c, write:  0, read:  0, close:add */
65543ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
65643ffcf69SNick Mathewson 	/* old=  c, write:  0, read:  0, close:del */
65743ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_DEL },
65843ffcf69SNick Mathewson 	/* old=  c, write:  0, read:  0, close:xxx */
65943ffcf69SNick Mathewson 	{ 0, 255 },
66043ffcf69SNick Mathewson 	/* old=  c, write:  0, read:add, close:  0 */
66143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
66243ffcf69SNick Mathewson 	/* old=  c, write:  0, read:add, close:add */
66343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
66443ffcf69SNick Mathewson 	/* old=  c, write:  0, read:add, close:del */
66543ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
66643ffcf69SNick Mathewson 	/* old=  c, write:  0, read:add, close:xxx */
66743ffcf69SNick Mathewson 	{ 0, 255 },
66843ffcf69SNick Mathewson 	/* old=  c, write:  0, read:del, close:  0 */
66943ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
67043ffcf69SNick Mathewson 	/* old=  c, write:  0, read:del, close:add */
67143ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
67243ffcf69SNick Mathewson 	/* old=  c, write:  0, read:del, close:del */
67343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
67443ffcf69SNick Mathewson 	/* old=  c, write:  0, read:del, close:xxx */
67543ffcf69SNick Mathewson 	{ 0, 255 },
67643ffcf69SNick Mathewson 	/* old=  c, write:  0, read:xxx, close:  0 */
67743ffcf69SNick Mathewson 	{ 0, 255 },
67843ffcf69SNick Mathewson 	/* old=  c, write:  0, read:xxx, close:add */
67943ffcf69SNick Mathewson 	{ 0, 255 },
68043ffcf69SNick Mathewson 	/* old=  c, write:  0, read:xxx, close:del */
68143ffcf69SNick Mathewson 	{ 0, 255 },
68243ffcf69SNick Mathewson 	/* old=  c, write:  0, read:xxx, close:xxx */
68343ffcf69SNick Mathewson 	{ 0, 255 },
68443ffcf69SNick Mathewson 	/* old=  c, write:add, read:  0, close:  0 */
68543ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
68643ffcf69SNick Mathewson 	/* old=  c, write:add, read:  0, close:add */
68743ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
68843ffcf69SNick Mathewson 	/* old=  c, write:add, read:  0, close:del */
68943ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
69043ffcf69SNick Mathewson 	/* old=  c, write:add, read:  0, close:xxx */
69143ffcf69SNick Mathewson 	{ 0, 255 },
69243ffcf69SNick Mathewson 	/* old=  c, write:add, read:add, close:  0 */
69343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
69443ffcf69SNick Mathewson 	/* old=  c, write:add, read:add, close:add */
69543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
69643ffcf69SNick Mathewson 	/* old=  c, write:add, read:add, close:del */
69743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
69843ffcf69SNick Mathewson 	/* old=  c, write:add, read:add, close:xxx */
69943ffcf69SNick Mathewson 	{ 0, 255 },
70043ffcf69SNick Mathewson 	/* old=  c, write:add, read:del, close:  0 */
70143ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
70243ffcf69SNick Mathewson 	/* old=  c, write:add, read:del, close:add */
70343ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
70443ffcf69SNick Mathewson 	/* old=  c, write:add, read:del, close:del */
70543ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
70643ffcf69SNick Mathewson 	/* old=  c, write:add, read:del, close:xxx */
70743ffcf69SNick Mathewson 	{ 0, 255 },
70843ffcf69SNick Mathewson 	/* old=  c, write:add, read:xxx, close:  0 */
70943ffcf69SNick Mathewson 	{ 0, 255 },
71043ffcf69SNick Mathewson 	/* old=  c, write:add, read:xxx, close:add */
71143ffcf69SNick Mathewson 	{ 0, 255 },
71243ffcf69SNick Mathewson 	/* old=  c, write:add, read:xxx, close:del */
71343ffcf69SNick Mathewson 	{ 0, 255 },
71443ffcf69SNick Mathewson 	/* old=  c, write:add, read:xxx, close:xxx */
71543ffcf69SNick Mathewson 	{ 0, 255 },
71643ffcf69SNick Mathewson 	/* old=  c, write:del, read:  0, close:  0 */
71743ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
71843ffcf69SNick Mathewson 	/* old=  c, write:del, read:  0, close:add */
71943ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
72043ffcf69SNick Mathewson 	/* old=  c, write:del, read:  0, close:del */
72143ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
72243ffcf69SNick Mathewson 	/* old=  c, write:del, read:  0, close:xxx */
72343ffcf69SNick Mathewson 	{ 0, 255 },
72443ffcf69SNick Mathewson 	/* old=  c, write:del, read:add, close:  0 */
72543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
72643ffcf69SNick Mathewson 	/* old=  c, write:del, read:add, close:add */
72743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
72843ffcf69SNick Mathewson 	/* old=  c, write:del, read:add, close:del */
72943ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
73043ffcf69SNick Mathewson 	/* old=  c, write:del, read:add, close:xxx */
73143ffcf69SNick Mathewson 	{ 0, 255 },
73243ffcf69SNick Mathewson 	/* old=  c, write:del, read:del, close:  0 */
73343ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
73443ffcf69SNick Mathewson 	/* old=  c, write:del, read:del, close:add */
73543ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
73643ffcf69SNick Mathewson 	/* old=  c, write:del, read:del, close:del */
73743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
73843ffcf69SNick Mathewson 	/* old=  c, write:del, read:del, close:xxx */
73943ffcf69SNick Mathewson 	{ 0, 255 },
74043ffcf69SNick Mathewson 	/* old=  c, write:del, read:xxx, close:  0 */
74143ffcf69SNick Mathewson 	{ 0, 255 },
74243ffcf69SNick Mathewson 	/* old=  c, write:del, read:xxx, close:add */
74343ffcf69SNick Mathewson 	{ 0, 255 },
74443ffcf69SNick Mathewson 	/* old=  c, write:del, read:xxx, close:del */
74543ffcf69SNick Mathewson 	{ 0, 255 },
74643ffcf69SNick Mathewson 	/* old=  c, write:del, read:xxx, close:xxx */
74743ffcf69SNick Mathewson 	{ 0, 255 },
74843ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:  0, close:  0 */
74943ffcf69SNick Mathewson 	{ 0, 255 },
75043ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:  0, close:add */
75143ffcf69SNick Mathewson 	{ 0, 255 },
75243ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:  0, close:del */
75343ffcf69SNick Mathewson 	{ 0, 255 },
75443ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:  0, close:xxx */
75543ffcf69SNick Mathewson 	{ 0, 255 },
75643ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:add, close:  0 */
75743ffcf69SNick Mathewson 	{ 0, 255 },
75843ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:add, close:add */
75943ffcf69SNick Mathewson 	{ 0, 255 },
76043ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:add, close:del */
76143ffcf69SNick Mathewson 	{ 0, 255 },
76243ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:add, close:xxx */
76343ffcf69SNick Mathewson 	{ 0, 255 },
76443ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:del, close:  0 */
76543ffcf69SNick Mathewson 	{ 0, 255 },
76643ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:del, close:add */
76743ffcf69SNick Mathewson 	{ 0, 255 },
76843ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:del, close:del */
76943ffcf69SNick Mathewson 	{ 0, 255 },
77043ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:del, close:xxx */
77143ffcf69SNick Mathewson 	{ 0, 255 },
77243ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:xxx, close:  0 */
77343ffcf69SNick Mathewson 	{ 0, 255 },
77443ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:xxx, close:add */
77543ffcf69SNick Mathewson 	{ 0, 255 },
77643ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:xxx, close:del */
77743ffcf69SNick Mathewson 	{ 0, 255 },
77843ffcf69SNick Mathewson 	/* old=  c, write:xxx, read:xxx, close:xxx */
77943ffcf69SNick Mathewson 	{ 0, 255 },
78043ffcf69SNick Mathewson 	/* old= cr, write:  0, read:  0, close:  0 */
78143ffcf69SNick Mathewson 	{ 0, 0 },
78243ffcf69SNick Mathewson 	/* old= cr, write:  0, read:  0, close:add */
78343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
78443ffcf69SNick Mathewson 	/* old= cr, write:  0, read:  0, close:del */
78543ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
78643ffcf69SNick Mathewson 	/* old= cr, write:  0, read:  0, close:xxx */
78743ffcf69SNick Mathewson 	{ 0, 255 },
78843ffcf69SNick Mathewson 	/* old= cr, write:  0, read:add, close:  0 */
78943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
79043ffcf69SNick Mathewson 	/* old= cr, write:  0, read:add, close:add */
79143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
79243ffcf69SNick Mathewson 	/* old= cr, write:  0, read:add, close:del */
79343ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
79443ffcf69SNick Mathewson 	/* old= cr, write:  0, read:add, close:xxx */
79543ffcf69SNick Mathewson 	{ 0, 255 },
79643ffcf69SNick Mathewson 	/* old= cr, write:  0, read:del, close:  0 */
79743ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
79843ffcf69SNick Mathewson 	/* old= cr, write:  0, read:del, close:add */
79943ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
80043ffcf69SNick Mathewson 	/* old= cr, write:  0, read:del, close:del */
80143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
80243ffcf69SNick Mathewson 	/* old= cr, write:  0, read:del, close:xxx */
80343ffcf69SNick Mathewson 	{ 0, 255 },
80443ffcf69SNick Mathewson 	/* old= cr, write:  0, read:xxx, close:  0 */
80543ffcf69SNick Mathewson 	{ 0, 255 },
80643ffcf69SNick Mathewson 	/* old= cr, write:  0, read:xxx, close:add */
80743ffcf69SNick Mathewson 	{ 0, 255 },
80843ffcf69SNick Mathewson 	/* old= cr, write:  0, read:xxx, close:del */
80943ffcf69SNick Mathewson 	{ 0, 255 },
81043ffcf69SNick Mathewson 	/* old= cr, write:  0, read:xxx, close:xxx */
81143ffcf69SNick Mathewson 	{ 0, 255 },
81243ffcf69SNick Mathewson 	/* old= cr, write:add, read:  0, close:  0 */
81343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
81443ffcf69SNick Mathewson 	/* old= cr, write:add, read:  0, close:add */
81543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
81643ffcf69SNick Mathewson 	/* old= cr, write:add, read:  0, close:del */
81743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
81843ffcf69SNick Mathewson 	/* old= cr, write:add, read:  0, close:xxx */
81943ffcf69SNick Mathewson 	{ 0, 255 },
82043ffcf69SNick Mathewson 	/* old= cr, write:add, read:add, close:  0 */
82143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
82243ffcf69SNick Mathewson 	/* old= cr, write:add, read:add, close:add */
82343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
82443ffcf69SNick Mathewson 	/* old= cr, write:add, read:add, close:del */
82543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
82643ffcf69SNick Mathewson 	/* old= cr, write:add, read:add, close:xxx */
82743ffcf69SNick Mathewson 	{ 0, 255 },
82843ffcf69SNick Mathewson 	/* old= cr, write:add, read:del, close:  0 */
82943ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
83043ffcf69SNick Mathewson 	/* old= cr, write:add, read:del, close:add */
83143ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
83243ffcf69SNick Mathewson 	/* old= cr, write:add, read:del, close:del */
83343ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
83443ffcf69SNick Mathewson 	/* old= cr, write:add, read:del, close:xxx */
83543ffcf69SNick Mathewson 	{ 0, 255 },
83643ffcf69SNick Mathewson 	/* old= cr, write:add, read:xxx, close:  0 */
83743ffcf69SNick Mathewson 	{ 0, 255 },
83843ffcf69SNick Mathewson 	/* old= cr, write:add, read:xxx, close:add */
83943ffcf69SNick Mathewson 	{ 0, 255 },
84043ffcf69SNick Mathewson 	/* old= cr, write:add, read:xxx, close:del */
84143ffcf69SNick Mathewson 	{ 0, 255 },
84243ffcf69SNick Mathewson 	/* old= cr, write:add, read:xxx, close:xxx */
84343ffcf69SNick Mathewson 	{ 0, 255 },
84443ffcf69SNick Mathewson 	/* old= cr, write:del, read:  0, close:  0 */
84543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
84643ffcf69SNick Mathewson 	/* old= cr, write:del, read:  0, close:add */
84743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
84843ffcf69SNick Mathewson 	/* old= cr, write:del, read:  0, close:del */
84943ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
85043ffcf69SNick Mathewson 	/* old= cr, write:del, read:  0, close:xxx */
85143ffcf69SNick Mathewson 	{ 0, 255 },
85243ffcf69SNick Mathewson 	/* old= cr, write:del, read:add, close:  0 */
85343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
85443ffcf69SNick Mathewson 	/* old= cr, write:del, read:add, close:add */
85543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
85643ffcf69SNick Mathewson 	/* old= cr, write:del, read:add, close:del */
85743ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
85843ffcf69SNick Mathewson 	/* old= cr, write:del, read:add, close:xxx */
85943ffcf69SNick Mathewson 	{ 0, 255 },
86043ffcf69SNick Mathewson 	/* old= cr, write:del, read:del, close:  0 */
86143ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
86243ffcf69SNick Mathewson 	/* old= cr, write:del, read:del, close:add */
86343ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
86443ffcf69SNick Mathewson 	/* old= cr, write:del, read:del, close:del */
86543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
86643ffcf69SNick Mathewson 	/* old= cr, write:del, read:del, close:xxx */
86743ffcf69SNick Mathewson 	{ 0, 255 },
86843ffcf69SNick Mathewson 	/* old= cr, write:del, read:xxx, close:  0 */
86943ffcf69SNick Mathewson 	{ 0, 255 },
87043ffcf69SNick Mathewson 	/* old= cr, write:del, read:xxx, close:add */
87143ffcf69SNick Mathewson 	{ 0, 255 },
87243ffcf69SNick Mathewson 	/* old= cr, write:del, read:xxx, close:del */
87343ffcf69SNick Mathewson 	{ 0, 255 },
87443ffcf69SNick Mathewson 	/* old= cr, write:del, read:xxx, close:xxx */
87543ffcf69SNick Mathewson 	{ 0, 255 },
87643ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:  0, close:  0 */
87743ffcf69SNick Mathewson 	{ 0, 255 },
87843ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:  0, close:add */
87943ffcf69SNick Mathewson 	{ 0, 255 },
88043ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:  0, close:del */
88143ffcf69SNick Mathewson 	{ 0, 255 },
88243ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:  0, close:xxx */
88343ffcf69SNick Mathewson 	{ 0, 255 },
88443ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:add, close:  0 */
88543ffcf69SNick Mathewson 	{ 0, 255 },
88643ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:add, close:add */
88743ffcf69SNick Mathewson 	{ 0, 255 },
88843ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:add, close:del */
88943ffcf69SNick Mathewson 	{ 0, 255 },
89043ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:add, close:xxx */
89143ffcf69SNick Mathewson 	{ 0, 255 },
89243ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:del, close:  0 */
89343ffcf69SNick Mathewson 	{ 0, 255 },
89443ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:del, close:add */
89543ffcf69SNick Mathewson 	{ 0, 255 },
89643ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:del, close:del */
89743ffcf69SNick Mathewson 	{ 0, 255 },
89843ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:del, close:xxx */
89943ffcf69SNick Mathewson 	{ 0, 255 },
90043ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:xxx, close:  0 */
90143ffcf69SNick Mathewson 	{ 0, 255 },
90243ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:xxx, close:add */
90343ffcf69SNick Mathewson 	{ 0, 255 },
90443ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:xxx, close:del */
90543ffcf69SNick Mathewson 	{ 0, 255 },
90643ffcf69SNick Mathewson 	/* old= cr, write:xxx, read:xxx, close:xxx */
90743ffcf69SNick Mathewson 	{ 0, 255 },
90843ffcf69SNick Mathewson 	/* old= cw, write:  0, read:  0, close:  0 */
90943ffcf69SNick Mathewson 	{ 0, 0 },
91043ffcf69SNick Mathewson 	/* old= cw, write:  0, read:  0, close:add */
91143ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
91243ffcf69SNick Mathewson 	/* old= cw, write:  0, read:  0, close:del */
91343ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
91443ffcf69SNick Mathewson 	/* old= cw, write:  0, read:  0, close:xxx */
91543ffcf69SNick Mathewson 	{ 0, 255 },
91643ffcf69SNick Mathewson 	/* old= cw, write:  0, read:add, close:  0 */
91743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
91843ffcf69SNick Mathewson 	/* old= cw, write:  0, read:add, close:add */
91943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
92043ffcf69SNick Mathewson 	/* old= cw, write:  0, read:add, close:del */
92143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
92243ffcf69SNick Mathewson 	/* old= cw, write:  0, read:add, close:xxx */
92343ffcf69SNick Mathewson 	{ 0, 255 },
92443ffcf69SNick Mathewson 	/* old= cw, write:  0, read:del, close:  0 */
92543ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
92643ffcf69SNick Mathewson 	/* old= cw, write:  0, read:del, close:add */
92743ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
92843ffcf69SNick Mathewson 	/* old= cw, write:  0, read:del, close:del */
92943ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
93043ffcf69SNick Mathewson 	/* old= cw, write:  0, read:del, close:xxx */
93143ffcf69SNick Mathewson 	{ 0, 255 },
93243ffcf69SNick Mathewson 	/* old= cw, write:  0, read:xxx, close:  0 */
93343ffcf69SNick Mathewson 	{ 0, 255 },
93443ffcf69SNick Mathewson 	/* old= cw, write:  0, read:xxx, close:add */
93543ffcf69SNick Mathewson 	{ 0, 255 },
93643ffcf69SNick Mathewson 	/* old= cw, write:  0, read:xxx, close:del */
93743ffcf69SNick Mathewson 	{ 0, 255 },
93843ffcf69SNick Mathewson 	/* old= cw, write:  0, read:xxx, close:xxx */
93943ffcf69SNick Mathewson 	{ 0, 255 },
94043ffcf69SNick Mathewson 	/* old= cw, write:add, read:  0, close:  0 */
94143ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
94243ffcf69SNick Mathewson 	/* old= cw, write:add, read:  0, close:add */
94343ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
94443ffcf69SNick Mathewson 	/* old= cw, write:add, read:  0, close:del */
94543ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
94643ffcf69SNick Mathewson 	/* old= cw, write:add, read:  0, close:xxx */
94743ffcf69SNick Mathewson 	{ 0, 255 },
94843ffcf69SNick Mathewson 	/* old= cw, write:add, read:add, close:  0 */
94943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
95043ffcf69SNick Mathewson 	/* old= cw, write:add, read:add, close:add */
95143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
95243ffcf69SNick Mathewson 	/* old= cw, write:add, read:add, close:del */
95343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
95443ffcf69SNick Mathewson 	/* old= cw, write:add, read:add, close:xxx */
95543ffcf69SNick Mathewson 	{ 0, 255 },
95643ffcf69SNick Mathewson 	/* old= cw, write:add, read:del, close:  0 */
95743ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
95843ffcf69SNick Mathewson 	/* old= cw, write:add, read:del, close:add */
95943ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
96043ffcf69SNick Mathewson 	/* old= cw, write:add, read:del, close:del */
96143ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
96243ffcf69SNick Mathewson 	/* old= cw, write:add, read:del, close:xxx */
96343ffcf69SNick Mathewson 	{ 0, 255 },
96443ffcf69SNick Mathewson 	/* old= cw, write:add, read:xxx, close:  0 */
96543ffcf69SNick Mathewson 	{ 0, 255 },
96643ffcf69SNick Mathewson 	/* old= cw, write:add, read:xxx, close:add */
96743ffcf69SNick Mathewson 	{ 0, 255 },
96843ffcf69SNick Mathewson 	/* old= cw, write:add, read:xxx, close:del */
96943ffcf69SNick Mathewson 	{ 0, 255 },
97043ffcf69SNick Mathewson 	/* old= cw, write:add, read:xxx, close:xxx */
97143ffcf69SNick Mathewson 	{ 0, 255 },
97243ffcf69SNick Mathewson 	/* old= cw, write:del, read:  0, close:  0 */
97343ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
97443ffcf69SNick Mathewson 	/* old= cw, write:del, read:  0, close:add */
97543ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
97643ffcf69SNick Mathewson 	/* old= cw, write:del, read:  0, close:del */
97743ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
97843ffcf69SNick Mathewson 	/* old= cw, write:del, read:  0, close:xxx */
97943ffcf69SNick Mathewson 	{ 0, 255 },
98043ffcf69SNick Mathewson 	/* old= cw, write:del, read:add, close:  0 */
98143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
98243ffcf69SNick Mathewson 	/* old= cw, write:del, read:add, close:add */
98343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
98443ffcf69SNick Mathewson 	/* old= cw, write:del, read:add, close:del */
98543ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
98643ffcf69SNick Mathewson 	/* old= cw, write:del, read:add, close:xxx */
98743ffcf69SNick Mathewson 	{ 0, 255 },
98843ffcf69SNick Mathewson 	/* old= cw, write:del, read:del, close:  0 */
98943ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
99043ffcf69SNick Mathewson 	/* old= cw, write:del, read:del, close:add */
99143ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
99243ffcf69SNick Mathewson 	/* old= cw, write:del, read:del, close:del */
99343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
99443ffcf69SNick Mathewson 	/* old= cw, write:del, read:del, close:xxx */
99543ffcf69SNick Mathewson 	{ 0, 255 },
99643ffcf69SNick Mathewson 	/* old= cw, write:del, read:xxx, close:  0 */
99743ffcf69SNick Mathewson 	{ 0, 255 },
99843ffcf69SNick Mathewson 	/* old= cw, write:del, read:xxx, close:add */
99943ffcf69SNick Mathewson 	{ 0, 255 },
100043ffcf69SNick Mathewson 	/* old= cw, write:del, read:xxx, close:del */
100143ffcf69SNick Mathewson 	{ 0, 255 },
100243ffcf69SNick Mathewson 	/* old= cw, write:del, read:xxx, close:xxx */
100343ffcf69SNick Mathewson 	{ 0, 255 },
100443ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:  0, close:  0 */
100543ffcf69SNick Mathewson 	{ 0, 255 },
100643ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:  0, close:add */
100743ffcf69SNick Mathewson 	{ 0, 255 },
100843ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:  0, close:del */
100943ffcf69SNick Mathewson 	{ 0, 255 },
101043ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:  0, close:xxx */
101143ffcf69SNick Mathewson 	{ 0, 255 },
101243ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:add, close:  0 */
101343ffcf69SNick Mathewson 	{ 0, 255 },
101443ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:add, close:add */
101543ffcf69SNick Mathewson 	{ 0, 255 },
101643ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:add, close:del */
101743ffcf69SNick Mathewson 	{ 0, 255 },
101843ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:add, close:xxx */
101943ffcf69SNick Mathewson 	{ 0, 255 },
102043ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:del, close:  0 */
102143ffcf69SNick Mathewson 	{ 0, 255 },
102243ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:del, close:add */
102343ffcf69SNick Mathewson 	{ 0, 255 },
102443ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:del, close:del */
102543ffcf69SNick Mathewson 	{ 0, 255 },
102643ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:del, close:xxx */
102743ffcf69SNick Mathewson 	{ 0, 255 },
102843ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:xxx, close:  0 */
102943ffcf69SNick Mathewson 	{ 0, 255 },
103043ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:xxx, close:add */
103143ffcf69SNick Mathewson 	{ 0, 255 },
103243ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:xxx, close:del */
103343ffcf69SNick Mathewson 	{ 0, 255 },
103443ffcf69SNick Mathewson 	/* old= cw, write:xxx, read:xxx, close:xxx */
103543ffcf69SNick Mathewson 	{ 0, 255 },
103643ffcf69SNick Mathewson 	/* old=crw, write:  0, read:  0, close:  0 */
103743ffcf69SNick Mathewson 	{ 0, 0 },
103843ffcf69SNick Mathewson 	/* old=crw, write:  0, read:  0, close:add */
103943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
104043ffcf69SNick Mathewson 	/* old=crw, write:  0, read:  0, close:del */
104143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
104243ffcf69SNick Mathewson 	/* old=crw, write:  0, read:  0, close:xxx */
104343ffcf69SNick Mathewson 	{ 0, 255 },
104443ffcf69SNick Mathewson 	/* old=crw, write:  0, read:add, close:  0 */
104543ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
104643ffcf69SNick Mathewson 	/* old=crw, write:  0, read:add, close:add */
104743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
104843ffcf69SNick Mathewson 	/* old=crw, write:  0, read:add, close:del */
104943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
105043ffcf69SNick Mathewson 	/* old=crw, write:  0, read:add, close:xxx */
105143ffcf69SNick Mathewson 	{ 0, 255 },
105243ffcf69SNick Mathewson 	/* old=crw, write:  0, read:del, close:  0 */
105343ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
105443ffcf69SNick Mathewson 	/* old=crw, write:  0, read:del, close:add */
105543ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
105643ffcf69SNick Mathewson 	/* old=crw, write:  0, read:del, close:del */
105743ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
105843ffcf69SNick Mathewson 	/* old=crw, write:  0, read:del, close:xxx */
105943ffcf69SNick Mathewson 	{ 0, 255 },
106043ffcf69SNick Mathewson 	/* old=crw, write:  0, read:xxx, close:  0 */
106143ffcf69SNick Mathewson 	{ 0, 255 },
106243ffcf69SNick Mathewson 	/* old=crw, write:  0, read:xxx, close:add */
106343ffcf69SNick Mathewson 	{ 0, 255 },
106443ffcf69SNick Mathewson 	/* old=crw, write:  0, read:xxx, close:del */
106543ffcf69SNick Mathewson 	{ 0, 255 },
106643ffcf69SNick Mathewson 	/* old=crw, write:  0, read:xxx, close:xxx */
106743ffcf69SNick Mathewson 	{ 0, 255 },
106843ffcf69SNick Mathewson 	/* old=crw, write:add, read:  0, close:  0 */
106943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
107043ffcf69SNick Mathewson 	/* old=crw, write:add, read:  0, close:add */
107143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
107243ffcf69SNick Mathewson 	/* old=crw, write:add, read:  0, close:del */
107343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
107443ffcf69SNick Mathewson 	/* old=crw, write:add, read:  0, close:xxx */
107543ffcf69SNick Mathewson 	{ 0, 255 },
107643ffcf69SNick Mathewson 	/* old=crw, write:add, read:add, close:  0 */
107743ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
107843ffcf69SNick Mathewson 	/* old=crw, write:add, read:add, close:add */
107943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
108043ffcf69SNick Mathewson 	/* old=crw, write:add, read:add, close:del */
108143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
108243ffcf69SNick Mathewson 	/* old=crw, write:add, read:add, close:xxx */
108343ffcf69SNick Mathewson 	{ 0, 255 },
108443ffcf69SNick Mathewson 	/* old=crw, write:add, read:del, close:  0 */
108543ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
108643ffcf69SNick Mathewson 	/* old=crw, write:add, read:del, close:add */
108743ffcf69SNick Mathewson 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
108843ffcf69SNick Mathewson 	/* old=crw, write:add, read:del, close:del */
108943ffcf69SNick Mathewson 	{ EPOLLOUT, EPOLL_CTL_MOD },
109043ffcf69SNick Mathewson 	/* old=crw, write:add, read:del, close:xxx */
109143ffcf69SNick Mathewson 	{ 0, 255 },
109243ffcf69SNick Mathewson 	/* old=crw, write:add, read:xxx, close:  0 */
109343ffcf69SNick Mathewson 	{ 0, 255 },
109443ffcf69SNick Mathewson 	/* old=crw, write:add, read:xxx, close:add */
109543ffcf69SNick Mathewson 	{ 0, 255 },
109643ffcf69SNick Mathewson 	/* old=crw, write:add, read:xxx, close:del */
109743ffcf69SNick Mathewson 	{ 0, 255 },
109843ffcf69SNick Mathewson 	/* old=crw, write:add, read:xxx, close:xxx */
109943ffcf69SNick Mathewson 	{ 0, 255 },
110043ffcf69SNick Mathewson 	/* old=crw, write:del, read:  0, close:  0 */
110143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
110243ffcf69SNick Mathewson 	/* old=crw, write:del, read:  0, close:add */
110343ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
110443ffcf69SNick Mathewson 	/* old=crw, write:del, read:  0, close:del */
110543ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
110643ffcf69SNick Mathewson 	/* old=crw, write:del, read:  0, close:xxx */
110743ffcf69SNick Mathewson 	{ 0, 255 },
110843ffcf69SNick Mathewson 	/* old=crw, write:del, read:add, close:  0 */
110943ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
111043ffcf69SNick Mathewson 	/* old=crw, write:del, read:add, close:add */
111143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
111243ffcf69SNick Mathewson 	/* old=crw, write:del, read:add, close:del */
111343ffcf69SNick Mathewson 	{ EPOLLIN, EPOLL_CTL_MOD },
111443ffcf69SNick Mathewson 	/* old=crw, write:del, read:add, close:xxx */
111543ffcf69SNick Mathewson 	{ 0, 255 },
111643ffcf69SNick Mathewson 	/* old=crw, write:del, read:del, close:  0 */
111743ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
111843ffcf69SNick Mathewson 	/* old=crw, write:del, read:del, close:add */
111943ffcf69SNick Mathewson 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
112043ffcf69SNick Mathewson 	/* old=crw, write:del, read:del, close:del */
112143ffcf69SNick Mathewson 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
112243ffcf69SNick Mathewson 	/* old=crw, write:del, read:del, close:xxx */
112343ffcf69SNick Mathewson 	{ 0, 255 },
112443ffcf69SNick Mathewson 	/* old=crw, write:del, read:xxx, close:  0 */
112543ffcf69SNick Mathewson 	{ 0, 255 },
112643ffcf69SNick Mathewson 	/* old=crw, write:del, read:xxx, close:add */
112743ffcf69SNick Mathewson 	{ 0, 255 },
112843ffcf69SNick Mathewson 	/* old=crw, write:del, read:xxx, close:del */
112943ffcf69SNick Mathewson 	{ 0, 255 },
113043ffcf69SNick Mathewson 	/* old=crw, write:del, read:xxx, close:xxx */
113143ffcf69SNick Mathewson 	{ 0, 255 },
113243ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:  0, close:  0 */
113343ffcf69SNick Mathewson 	{ 0, 255 },
113443ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:  0, close:add */
113543ffcf69SNick Mathewson 	{ 0, 255 },
113643ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:  0, close:del */
113743ffcf69SNick Mathewson 	{ 0, 255 },
113843ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:  0, close:xxx */
113943ffcf69SNick Mathewson 	{ 0, 255 },
114043ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:add, close:  0 */
114143ffcf69SNick Mathewson 	{ 0, 255 },
114243ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:add, close:add */
114343ffcf69SNick Mathewson 	{ 0, 255 },
114443ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:add, close:del */
114543ffcf69SNick Mathewson 	{ 0, 255 },
114643ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:add, close:xxx */
114743ffcf69SNick Mathewson 	{ 0, 255 },
114843ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:del, close:  0 */
114943ffcf69SNick Mathewson 	{ 0, 255 },
115043ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:del, close:add */
115143ffcf69SNick Mathewson 	{ 0, 255 },
115243ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:del, close:del */
115343ffcf69SNick Mathewson 	{ 0, 255 },
115443ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:del, close:xxx */
115543ffcf69SNick Mathewson 	{ 0, 255 },
115643ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:xxx, close:  0 */
115743ffcf69SNick Mathewson 	{ 0, 255 },
115843ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:xxx, close:add */
115943ffcf69SNick Mathewson 	{ 0, 255 },
116043ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:xxx, close:del */
116143ffcf69SNick Mathewson 	{ 0, 255 },
116243ffcf69SNick Mathewson 	/* old=crw, write:xxx, read:xxx, close:xxx */
116343ffcf69SNick Mathewson 	{ 0, 255 },
116443ffcf69SNick Mathewson };
116543ffcf69SNick Mathewson 
116643ffcf69SNick Mathewson #endif
1167