ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev_epoll.c
(Generate patch)

Comparing libev/ev_epoll.c (file contents):
Revision 1.51 by root, Wed Apr 21 13:13:18 2010 UTC vs.
Revision 1.54 by sf-exg, Fri Oct 22 10:50:24 2010 UTC

148 int want = anfds [fd].events; 148 int want = anfds [fd].events;
149 int got = (ev->events & (EPOLLOUT | EPOLLERR | EPOLLHUP) ? EV_WRITE : 0) 149 int got = (ev->events & (EPOLLOUT | EPOLLERR | EPOLLHUP) ? EV_WRITE : 0)
150 | (ev->events & (EPOLLIN | EPOLLERR | EPOLLHUP) ? EV_READ : 0); 150 | (ev->events & (EPOLLIN | EPOLLERR | EPOLLHUP) ? EV_READ : 0);
151 151
152 /* check for spurious notification */ 152 /* check for spurious notification */
153 /* we assume that fd is always in range, as we never shrink the anfds array */
153 if (expect_false ((uint32_t)anfds [fd].egen != (uint32_t)(ev->data.u64 >> 32))) 154 if (expect_false ((uint32_t)anfds [fd].egen != (uint32_t)(ev->data.u64 >> 32)))
154 { 155 {
155 /* recreate kernel state */ 156 /* recreate kernel state */
156 postfork = 1; 157 postfork = 1;
157 continue; 158 continue;
168 169
169 /* pre-2.6.9 kernels require a non-null pointer with EPOLL_CTL_DEL, */ 170 /* pre-2.6.9 kernels require a non-null pointer with EPOLL_CTL_DEL, */
170 /* which is fortunately easy to do for us. */ 171 /* which is fortunately easy to do for us. */
171 if (epoll_ctl (backend_fd, want ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, ev)) 172 if (epoll_ctl (backend_fd, want ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, ev))
172 { 173 {
173 postfork = 1; /* an error occured, recreate kernel state */ 174 postfork = 1; /* an error occurred, recreate kernel state */
174 continue; 175 continue;
175 } 176 }
176 } 177 }
177 178
178 fd_event (EV_A_ fd, got); 179 fd_event (EV_A_ fd, got);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines