version 1.37.2.1, 2022/11/28 23:06:06
|
version 1.37.2.4, 2022/11/29 11:55:58
|
Line 537 sched_hook_read(void *task, void *arg)
|
Line 537 sched_hook_read(void *task, void *arg)
|
{ |
{ |
sched_task_t *t = task; |
sched_task_t *t = task; |
sched_root_task_t *r = NULL; |
sched_root_task_t *r = NULL; |
intptr_t mask = (intptr_t) arg; | uintptr_t mask = (uintptr_t) arg; |
#if SUP_ENABLE == KQ_SUPPORT |
#if SUP_ENABLE == KQ_SUPPORT |
struct kevent chg[1]; |
struct kevent chg[1]; |
struct timespec timeout = { 0, 0 }; |
struct timespec timeout = { 0, 0 }; |
Line 553 sched_hook_read(void *task, void *arg)
|
Line 553 sched_hook_read(void *task, void *arg)
|
|
|
#if SUP_ENABLE == KQ_SUPPORT |
#if SUP_ENABLE == KQ_SUPPORT |
#ifdef __NetBSD__ |
#ifdef __NetBSD__ |
EV_SET(&chg[0], TASK_FD(t), EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, (intptr_t) TASK_FD(t)); | EV_SET(&chg[0], TASK_FD(t), EVFILT_READ, EV_ADD | EV_CLEAR | mask, |
| 0, 0, (intptr_t) TASK_FD(t)); |
#else |
#else |
EV_SET(&chg[0], TASK_FD(t), EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, (void*) TASK_FD(t)); | EV_SET(&chg[0], TASK_FD(t), EVFILT_READ, EV_ADD | EV_CLEAR | mask, |
| 0, 0, (void*) TASK_FD(t)); |
#endif |
#endif |
if (kevent(r->root_kq, chg, 1, NULL, 0, &timeout) == -1) { |
if (kevent(r->root_kq, chg, 1, NULL, 0, &timeout) == -1) { |
if (r->root_hooks.hook_exec.exception) |
if (r->root_hooks.hook_exec.exception) |
Line 620 sched_hook_read(void *task, void *arg)
|
Line 622 sched_hook_read(void *task, void *arg)
|
* return: <0 errors and 0 ok |
* return: <0 errors and 0 ok |
*/ |
*/ |
void * |
void * |
sched_hook_write(void *task, void *arg __unused) | sched_hook_write(void *task, void *arg) |
{ |
{ |
sched_task_t *t = task; |
sched_task_t *t = task; |
sched_root_task_t *r = NULL; |
sched_root_task_t *r = NULL; |
|
uintptr_t mask = (uintptr_t) arg; |
#if SUP_ENABLE == KQ_SUPPORT |
#if SUP_ENABLE == KQ_SUPPORT |
struct kevent chg[1]; |
struct kevent chg[1]; |
struct timespec timeout = { 0, 0 }; |
struct timespec timeout = { 0, 0 }; |
Line 639 sched_hook_write(void *task, void *arg __unused)
|
Line 642 sched_hook_write(void *task, void *arg __unused)
|
|
|
#if SUP_ENABLE == KQ_SUPPORT |
#if SUP_ENABLE == KQ_SUPPORT |
#ifdef __NetBSD__ |
#ifdef __NetBSD__ |
EV_SET(&chg[0], TASK_FD(t), EVFILT_WRITE, EV_ADD | EV_CLEAR, 0, 0, (intptr_t) TASK_FD(t)); | EV_SET(&chg[0], TASK_FD(t), EVFILT_WRITE, EV_ADD | EV_CLEAR | mask, |
| 0, 0, (intptr_t) TASK_FD(t)); |
#else |
#else |
EV_SET(&chg[0], TASK_FD(t), EVFILT_WRITE, EV_ADD | EV_CLEAR, 0, 0, (void*) TASK_FD(t)); | EV_SET(&chg[0], TASK_FD(t), EVFILT_WRITE, EV_ADD | EV_CLEAR | mask, |
| 0, 0, (void*) TASK_FD(t)); |
#endif |
#endif |
if (kevent(r->root_kq, chg, 1, NULL, 0, &timeout) == -1) { |
if (kevent(r->root_kq, chg, 1, NULL, 0, &timeout) == -1) { |
if (r->root_hooks.hook_exec.exception) |
if (r->root_hooks.hook_exec.exception) |
Line 651 sched_hook_write(void *task, void *arg __unused)
|
Line 656 sched_hook_write(void *task, void *arg __unused)
|
return (void*) -1; |
return (void*) -1; |
} |
} |
#elif SUP_ENABLE == EP_SUPPORT |
#elif SUP_ENABLE == EP_SUPPORT |
|
if (!mask) |
|
mask = EPOLLOUT; |
ee.data.fd = TASK_FD(t); |
ee.data.fd = TASK_FD(t); |
ee.events = EPOLLOUT; | ee.events = mask; |
|
|
if (FD_ISSET(TASK_FD(t), &r->root_fds[2])) { |
if (FD_ISSET(TASK_FD(t), &r->root_fds[2])) { |
flg |= 4; |
flg |= 4; |
Line 664 sched_hook_write(void *task, void *arg __unused)
|
Line 671 sched_hook_write(void *task, void *arg __unused)
|
} |
} |
if (FD_ISSET(TASK_FD(t), &r->root_fds[1])) { |
if (FD_ISSET(TASK_FD(t), &r->root_fds[1])) { |
flg |= 2; |
flg |= 2; |
|
ee.events |= EPOLLOUT; |
} |
} |
|
|
if (epoll_ctl(r->root_kq, flg ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, TASK_FD(t), &ee) == -1) { |
if (epoll_ctl(r->root_kq, flg ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, TASK_FD(t), &ee) == -1) { |
Line 673 sched_hook_write(void *task, void *arg __unused)
|
Line 681 sched_hook_write(void *task, void *arg __unused)
|
LOGERR; |
LOGERR; |
return (void*) -1; |
return (void*) -1; |
} else |
} else |
FD_SET(TASK_FD(t), &r->root_fds[1]); | if (mask & EPOLLOUT) |
| FD_SET(TASK_FD(t), &r->root_fds[1]); |
#else |
#else |
FD_SET(TASK_FD(t), &r->root_fds[1]); | if (!mask) |
| FD_SET(TASK_FD(t), &r->root_fds[1]); |
| else |
| if (mask & 1) |
| FD_SET(TASK_FD(t), &r->root_fds[1]); |
|
|
if (TASK_FD(t) >= r->root_kq) |
if (TASK_FD(t) >= r->root_kq) |
r->root_kq = TASK_FD(t) + 1; |
r->root_kq = TASK_FD(t) + 1; |