aboutsummaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform')
-rw-r--r--src/platform/posix/posix_pollq_kqueue.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/platform/posix/posix_pollq_kqueue.c b/src/platform/posix/posix_pollq_kqueue.c
index 562c888e..e78b89a8 100644
--- a/src/platform/posix/posix_pollq_kqueue.c
+++ b/src/platform/posix/posix_pollq_kqueue.c
@@ -240,13 +240,6 @@ nni_posix_poll_thr(void *arg)
void *cbarg;
unsigned revents;
- nni_mtx_lock(&pq->mtx);
- if (pq->closed) {
- nni_mtx_unlock(&pq->mtx);
- nni_posix_pollq_reap(pq);
- return;
- }
- nni_mtx_unlock(&pq->mtx);
n = kevent(pq->kq, NULL, 0, evs, NNI_MAX_KQUEUE_EVENTS, NULL);
for (int i = 0; i < n; i++) {
@@ -261,6 +254,10 @@ nni_posix_poll_thr(void *arg)
break;
}
if (ev->udata == NULL) {
+ if (ev->flags & EV_EOF) {
+ nni_posix_pollq_reap(pq);
+ return;
+ }
nni_plat_pipe_clear(pq->wake_rfd);
nni_posix_pollq_reap(pq);
continue;
@@ -291,8 +288,9 @@ nni_posix_pollq_destroy(nni_posix_pollq *pq)
nni_mtx_unlock(&pq->mtx);
nni_plat_pipe_raise(pq->wake_wfd);
+ (void) close(pq->wake_wfd);
nni_thr_fini(&pq->thr);
- nni_plat_pipe_close(pq->wake_wfd, pq->wake_rfd);
+ (void) close(pq->wake_rfd);
if (pq->kq >= 0) {
close(pq->kq);