|
version 1.37.2.1, 2022/11/28 23:06:06
|
version 1.38, 2022/11/29 20:15:18
|
|
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; |