… | |
… | |
11 | ev.data.fd = fd; |
11 | ev.data.fd = fd; |
12 | ev.events = |
12 | ev.events = |
13 | (nev & EV_READ ? EPOLLIN : 0) |
13 | (nev & EV_READ ? EPOLLIN : 0) |
14 | | (nev & EV_WRITE ? EPOLLOUT : 0); |
14 | | (nev & EV_WRITE ? EPOLLOUT : 0); |
15 | |
15 | |
16 | fprintf (stderr, "reify %d,%d,%d m%d (r=%d)\n", fd, oev, nev, mode,//D |
|
|
17 | epoll_ctl (epoll_fd, mode, fd, &ev) |
16 | epoll_ctl (epoll_fd, mode, fd, &ev); |
18 | );//D |
|
|
19 | } |
17 | } |
20 | |
18 | |
21 | void epoll_postfork_child (void) |
19 | void epoll_postfork_child (void) |
22 | { |
20 | { |
23 | int fd; |
21 | int fd; |
24 | |
22 | |
25 | epoll_fd = epoll_create (256); |
23 | epoll_fd = epoll_create (256); |
|
|
24 | fcntl (epoll_fd, F_SETFD, FD_CLOEXEC); |
26 | |
25 | |
27 | /* re-register interest in fds */ |
26 | /* re-register interest in fds */ |
28 | for (fd = 0; fd < anfdmax; ++fd) |
27 | for (fd = 0; fd < anfdmax; ++fd) |
29 | if (anfds [fd].wev) |
28 | if (anfds [fd].wev) |
30 | epoll_modify (fd, EV_NONE, anfds [fd].wev); |
29 | epoll_modify (fd, EV_NONE, anfds [fd].wev); |
… | |
… | |
55 | eventmax += eventmax >> 1; |
54 | eventmax += eventmax >> 1; |
56 | events = malloc (sizeof (struct epoll_event) * eventmax); |
55 | events = malloc (sizeof (struct epoll_event) * eventmax); |
57 | } |
56 | } |
58 | } |
57 | } |
59 | |
58 | |
60 | int epoll_init (int flags) |
59 | void epoll_init (int flags) |
61 | { |
60 | { |
62 | epoll_fd = epoll_create (256); |
61 | epoll_fd = epoll_create (256); |
63 | |
62 | |
64 | if (epoll_fd < 0) |
63 | if (epoll_fd < 0) |
65 | return 0; |
64 | return; |
66 | |
65 | |
|
|
66 | fcntl (epoll_fd, F_SETFD, FD_CLOEXEC); |
|
|
67 | |
67 | ev_method = EVMETHOD_EPOLL; |
68 | ev_method = EVMETHOD_EPOLL; |
68 | method_fudge = 1e-3; /* needed to compensate for epoll returning early */ |
69 | method_fudge = 1e-3; /* needed to compensate for epoll returning early */ |
69 | method_modify = epoll_modify; |
70 | method_modify = epoll_modify; |
70 | method_poll = epoll_poll; |
71 | method_poll = epoll_poll; |
71 | |
72 | |
72 | eventmax = 64; /* intiial number of events receivable per poll */ |
73 | eventmax = 64; /* intiial number of events receivable per poll */ |
73 | events = malloc (sizeof (struct epoll_event) * eventmax); |
74 | events = malloc (sizeof (struct epoll_event) * eventmax); |
74 | |
|
|
75 | return 1; |
|
|
76 | } |
75 | } |