View | Details | Raw Unified | Return to bug 240590 | Differences between
and this patch

Collapse All | Expand All

(-)b/sys/compat/linux/linux_event.c (-4 / +5 lines)
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:

Return to bug 240590