|
Lines 306-312
epoll_to_kevent(struct thread *td, struct file *epfp,
Link Here
|
| 306 |
|
306 |
|
| 307 |
/* flags related to how event is registered */ |
307 |
/* flags related to how event is registered */ |
| 308 |
if ((levents & LINUX_EPOLLONESHOT) != 0) |
308 |
if ((levents & LINUX_EPOLLONESHOT) != 0) |
| 309 |
*kev_flags |= EV_ONESHOT; |
309 |
*kev_flags |= EV_DISPATCH; |
| 310 |
if ((levents & LINUX_EPOLLET) != 0) |
310 |
if ((levents & LINUX_EPOLLET) != 0) |
| 311 |
*kev_flags |= EV_CLEAR; |
311 |
*kev_flags |= EV_CLEAR; |
| 312 |
if ((levents & LINUX_EPOLLERR) != 0) |
312 |
if ((levents & LINUX_EPOLLERR) != 0) |
|
Lines 501-516
linux_epoll_ctl(struct thread *td, struct linux_epoll_ctl_args *args)
Link Here
|
| 501 |
case LINUX_EPOLL_CTL_ADD: |
501 |
case LINUX_EPOLL_CTL_ADD: |
| 502 |
/* |
502 |
/* |
| 503 |
* kqueue_register() return ENOENT if event does not exists |
503 |
* kqueue_register() return ENOENT if event does not exists |
| 504 |
* and the EV_ADD flag is not set. |
504 |
* and the EV_ADD flag is not set. Reset EV_ENABLE flag to |
|
|
505 |
* avoid accidental activation of fired oneshot events. |
| 505 |
*/ |
506 |
*/ |
| 506 |
kev[0].flags &= ~EV_ADD; |
507 |
kev[0].flags &= ~(EV_ADD | EV_ENABLE); |
| 507 |
error = kqfd_register(args->epfd, &kev[0], td, M_WAITOK); |
508 |
error = kqfd_register(args->epfd, &kev[0], td, M_WAITOK); |
| 508 |
if (error != ENOENT) { |
509 |
if (error != ENOENT) { |
| 509 |
error = EEXIST; |
510 |
error = EEXIST; |
| 510 |
goto leave0; |
511 |
goto leave0; |
| 511 |
} |
512 |
} |
| 512 |
error = 0; |
513 |
error = 0; |
| 513 |
kev[0].flags |= EV_ADD; |
514 |
kev[0].flags |= (EV_ADD | EV_ENABLE); |
| 514 |
break; |
515 |
break; |
| 515 |
|
516 |
|
| 516 |
case LINUX_EPOLL_CTL_DEL: |
517 |
case LINUX_EPOLL_CTL_DEL: |