mirror of
https://github.com/darlinghq/darling-libkqueue.git
synced 2024-10-07 09:13:21 +00:00
use kq_mtx
git-svn-id: svn://svn.code.sf.net/p/libkqueue/code/trunk@193 fb4e3144-bc1c-4b72-a658-5bcd248dd7f7
This commit is contained in:
parent
3796661e67
commit
f4a842909a
@ -249,13 +249,15 @@ kevent(int kqfd, const struct kevent *changelist, int nchanges,
|
||||
* Process each kevent on the changelist.
|
||||
*/
|
||||
if (nchanges) {
|
||||
pthread_mutex_lock(&kq->kq_mtx);
|
||||
rv = kevent_copyin(kq, changelist, nchanges, eventlist, nevents);
|
||||
if (rv < 0)
|
||||
return (-1);
|
||||
goto errout;
|
||||
if (rv > 0) {
|
||||
eventlist += rv;
|
||||
nevents -= rv;
|
||||
}
|
||||
pthread_mutex_unlock(&kq->kq_mtx);
|
||||
}
|
||||
|
||||
/* Determine if we need to wait for events. */
|
||||
@ -286,4 +288,8 @@ kevent(int kqfd, const struct kevent *changelist, int nchanges,
|
||||
#endif /* KQUEUE_DEBUG */
|
||||
|
||||
return (nret);
|
||||
|
||||
errout:
|
||||
pthread_mutex_unlock(&kq->kq_mtx);
|
||||
return (-1);
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ kevent_copyout(struct kqueue *kq, int nready,
|
||||
struct filter *filt;
|
||||
int i, rv, nret;
|
||||
|
||||
pthread_mutex_lock(&kq->kq_mtx);
|
||||
nret = 0;
|
||||
for (i = 0; (i < EVFILT_SYSCOUNT && nready > 0 && nevents > 0); i++) {
|
||||
// dbg_printf("eventlist: n = %d nevents = %d", nready, nevents);
|
||||
@ -59,7 +60,8 @@ kevent_copyout(struct kqueue *kq, int nready,
|
||||
rv = filt->kf_copyout(filt, eventlist, nevents);
|
||||
if (rv < 0) {
|
||||
dbg_puts("kevent_copyout failed");
|
||||
return (-1);
|
||||
nret = -1;
|
||||
break;
|
||||
}
|
||||
nret += rv;
|
||||
eventlist += rv;
|
||||
@ -67,6 +69,7 @@ kevent_copyout(struct kqueue *kq, int nready,
|
||||
nready--;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&kq->kq_mtx);
|
||||
|
||||
return (nret);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user