… | |
… | |
177 | * we assume that fd is always in range, as we never shrink the anfds array |
177 | * we assume that fd is always in range, as we never shrink the anfds array |
178 | */ |
178 | */ |
179 | if (expect_false ((uint32_t)anfds [fd].egen != (uint32_t)(ev->data.u64 >> 32))) |
179 | if (expect_false ((uint32_t)anfds [fd].egen != (uint32_t)(ev->data.u64 >> 32))) |
180 | { |
180 | { |
181 | /* recreate kernel state */ |
181 | /* recreate kernel state */ |
182 | postfork = 1; |
182 | postfork |= 2; |
183 | continue; |
183 | continue; |
184 | } |
184 | } |
185 | |
185 | |
186 | if (expect_false (got & ~want)) |
186 | if (expect_false (got & ~want)) |
187 | { |
187 | { |
… | |
… | |
201 | |
201 | |
202 | /* pre-2.6.9 kernels require a non-null pointer with EPOLL_CTL_DEL, */ |
202 | /* pre-2.6.9 kernels require a non-null pointer with EPOLL_CTL_DEL, */ |
203 | /* which is fortunately easy to do for us. */ |
203 | /* which is fortunately easy to do for us. */ |
204 | if (epoll_ctl (backend_fd, want ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, ev)) |
204 | if (epoll_ctl (backend_fd, want ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, ev)) |
205 | { |
205 | { |
206 | postfork = 1; /* an error occurred, recreate kernel state */ |
206 | postfork |= 2; /* an error occurred, recreate kernel state */ |
207 | continue; |
207 | continue; |
208 | } |
208 | } |
209 | } |
209 | } |
210 | |
210 | |
211 | fd_event (EV_A_ fd, got); |
211 | fd_event (EV_A_ fd, got); |