version 1.82.2.4, 2016/04/22 15:44:16 |
version 1.82.2.5, 2016/10/05 20:56:02 |
Line 141 extern const struct filterops sig_filtop |
|
Line 141 extern const struct filterops sig_filtop |
|
* These should be listed in the numeric order of the EVFILT_* defines. |
* These should be listed in the numeric order of the EVFILT_* defines. |
* If filtops is NULL, the filter isn't implemented in NetBSD. |
* If filtops is NULL, the filter isn't implemented in NetBSD. |
* End of list is when name is NULL. |
* End of list is when name is NULL. |
* |
* |
* Note that 'refcnt' is meaningless for built-in filters. |
* Note that 'refcnt' is meaningless for built-in filters. |
*/ |
*/ |
struct kfilter { |
struct kfilter { |
Line 935 kqueue_register(struct kqueue *kq, struc |
|
Line 935 kqueue_register(struct kqueue *kq, struc |
|
/* search if knote already exists */ |
/* search if knote already exists */ |
if (kfilter->filtops->f_isfd) { |
if (kfilter->filtops->f_isfd) { |
/* monitoring a file descriptor */ |
/* monitoring a file descriptor */ |
fd = kev->ident; |
/* validate descriptor */ |
if ((fp = fd_getfile(fd)) == NULL) { |
if (kev->ident > INT_MAX |
|
|| (fp = fd_getfile(fd = kev->ident)) == NULL) { |
rw_exit(&kqueue_filter_lock); |
rw_exit(&kqueue_filter_lock); |
kmem_free(newkn, sizeof(*newkn)); |
kmem_free(newkn, sizeof(*newkn)); |
return EBADF; |
return EBADF; |
Line 1179 kqueue_scan(file_t *fp, size_t maxevents |
|
Line 1180 kqueue_scan(file_t *fp, size_t maxevents |
|
} else { |
} else { |
/* no timeout, wait forever */ |
/* no timeout, wait forever */ |
timeout = 0; |
timeout = 0; |
} |
} |
|
|
memset(&morker, 0, sizeof(morker)); |
memset(&morker, 0, sizeof(morker)); |
marker = &morker; |
marker = &morker; |
|
|
mutex_spin_exit(&kq->kq_lock); |
mutex_spin_exit(&kq->kq_lock); |
|
|
mutex_exit(&fdp->fd_lock); |
mutex_exit(&fdp->fd_lock); |
if (kn->kn_fop->f_isfd) |
if (kn->kn_fop->f_isfd) |
fd_putfile(kn->kn_id); |
fd_putfile(kn->kn_id); |
atomic_dec_uint(&kn->kn_kfilter->refcnt); |
atomic_dec_uint(&kn->kn_kfilter->refcnt); |
kmem_free(kn, sizeof(*kn)); |
kmem_free(kn, sizeof(*kn)); |