version 1.7.2.1, 2012/05/31 14:17:59
|
version 1.8, 2012/05/31 22:31:48
|
Line 156 sched_hook_cancel(void *task, void *arg __unused)
|
Line 156 sched_hook_cancel(void *task, void *arg __unused)
|
EV_SET(&chg[0], TASK_VAL(t), EVFILT_SIGNAL, EV_DELETE, 0, 0, (void*) TASK_VAL(t)); |
EV_SET(&chg[0], TASK_VAL(t), EVFILT_SIGNAL, EV_DELETE, 0, 0, (void*) TASK_VAL(t)); |
#endif |
#endif |
break; |
break; |
|
#ifdef EVFILT_USER |
case taskUSER: |
case taskUSER: |
#ifdef __NetBSD__ |
#ifdef __NetBSD__ |
EV_SET(&chg[0], TASK_VAL(t), EVFILT_USER, EV_DELETE, 0, 0, (intptr_t) TASK_VAL(t)); |
EV_SET(&chg[0], TASK_VAL(t), EVFILT_USER, EV_DELETE, 0, 0, (intptr_t) TASK_VAL(t)); |
#else |
#else |
EV_SET(&chg[0], TASK_VAL(t), EVFILT_USER, EV_DELETE, 0, 0, (void*) TASK_VAL(t)); |
EV_SET(&chg[0], TASK_VAL(t), EVFILT_USER, EV_DELETE, 0, 0, (void*) TASK_VAL(t)); |
#endif |
#endif |
|
#endif |
break; |
break; |
default: |
default: |
return (void*) -1; | return NULL; |
} |
} |
|
|
kevent(TASK_ROOT(t)->root_kq, chg, 1, NULL, 0, &timeout); |
kevent(TASK_ROOT(t)->root_kq, chg, 1, NULL, 0, &timeout); |
Line 386 sched_hook_signal(void *task, void *arg __unused)
|
Line 388 sched_hook_signal(void *task, void *arg __unused)
|
* @arg = unused |
* @arg = unused |
* return: <0 errors and 0 ok |
* return: <0 errors and 0 ok |
*/ |
*/ |
|
#ifdef EVFILT_USER |
void * |
void * |
sched_hook_user(void *task, void *arg __unused) |
sched_hook_user(void *task, void *arg __unused) |
{ |
{ |
Line 397 sched_hook_user(void *task, void *arg __unused)
|
Line 400 sched_hook_user(void *task, void *arg __unused)
|
return (void*) -1; |
return (void*) -1; |
|
|
#ifdef __NetBSD__ |
#ifdef __NetBSD__ |
EV_SET(&chg[0], TASK_VAL(t), EVFILT_USER, EV_ADD | EV_CLEAR, NOTE_FFNOP, 0, (intptr_t) TASK_VAL(t)); | EV_SET(&chg[0], TASK_VAL(t), EVFILT_USER, EV_ADD | EV_CLEAR, TASK_DATLEN(t), |
| 0, (intptr_t) TASK_VAL(t)); |
#else |
#else |
EV_SET(&chg[0], TASK_VAL(t), EVFILT_USER, EV_ADD | EV_CLEAR, NOTE_FFNOP, 0, (void*) TASK_VAL(t)); | EV_SET(&chg[0], TASK_VAL(t), EVFILT_USER, EV_ADD | EV_CLEAR, TASK_DATLEN(t), |
| 0, (void*) TASK_VAL(t)); |
#endif |
#endif |
if (kevent(TASK_ROOT(t)->root_kq, chg, 1, NULL, 0, &timeout) == -1) { |
if (kevent(TASK_ROOT(t)->root_kq, chg, 1, NULL, 0, &timeout) == -1) { |
if (TASK_ROOT(t)->root_hooks.hook_exec.exception) |
if (TASK_ROOT(t)->root_hooks.hook_exec.exception) |
Line 411 sched_hook_user(void *task, void *arg __unused)
|
Line 416 sched_hook_user(void *task, void *arg __unused)
|
|
|
return NULL; |
return NULL; |
} |
} |
|
#endif |
|
|
/* |
/* |
* sched_hook_fetch() - Default FETCH hook |
* sched_hook_fetch() - Default FETCH hook |
Line 645 sched_hook_fetch(void *root, void *arg __unused)
|
Line 651 sched_hook_fetch(void *root, void *arg __unused)
|
TAILQ_FOREACH_SAFE(task, &r->root_node, task_node, tmp) { |
TAILQ_FOREACH_SAFE(task, &r->root_node, task_node, tmp) { |
if (TASK_FD(task) != ((intptr_t) res[i].udata)) |
if (TASK_FD(task) != ((intptr_t) res[i].udata)) |
continue; |
continue; |
|
else { |
|
TASK_DATA(task) = (void*) (uintptr_t) res[i].data; |
|
TASK_DATLEN(task) = res[i].fflags; |
|
} |
/* remove node handle */ |
/* remove node handle */ |
#ifdef HAVE_LIBPTHREAD |
#ifdef HAVE_LIBPTHREAD |
pthread_mutex_lock(&r->root_mtx[taskNODE]); |
pthread_mutex_lock(&r->root_mtx[taskNODE]); |
Line 668 sched_hook_fetch(void *root, void *arg __unused)
|
Line 678 sched_hook_fetch(void *root, void *arg __unused)
|
TAILQ_FOREACH_SAFE(task, &r->root_proc, task_node, tmp) { |
TAILQ_FOREACH_SAFE(task, &r->root_proc, task_node, tmp) { |
if (TASK_VAL(task) != ((uintptr_t) res[i].udata)) |
if (TASK_VAL(task) != ((uintptr_t) res[i].udata)) |
continue; |
continue; |
|
else { |
|
TASK_DATA(task) = (void*) (uintptr_t) res[i].data; |
|
TASK_DATLEN(task) = res[i].fflags; |
|
} |
/* remove proc handle */ |
/* remove proc handle */ |
#ifdef HAVE_LIBPTHREAD |
#ifdef HAVE_LIBPTHREAD |
pthread_mutex_lock(&r->root_mtx[taskPROC]); |
pthread_mutex_lock(&r->root_mtx[taskPROC]); |
Line 710 sched_hook_fetch(void *root, void *arg __unused)
|
Line 724 sched_hook_fetch(void *root, void *arg __unused)
|
break; |
break; |
} |
} |
break; |
break; |
|
#ifdef EVFILT_USER |
case EVFILT_USER: |
case EVFILT_USER: |
TAILQ_FOREACH_SAFE(task, &r->root_user, task_node, tmp) { |
TAILQ_FOREACH_SAFE(task, &r->root_user, task_node, tmp) { |
if (TASK_VAL(task) != ((uintptr_t) res[i].udata)) |
if (TASK_VAL(task) != ((uintptr_t) res[i].udata)) |
continue; |
continue; |
|
else { |
|
TASK_DATA(task) = (void*) res[i].data; |
|
TASK_DATLEN(task) = res[i].fflags; |
|
} |
/* remove user handle */ |
/* remove user handle */ |
#ifdef HAVE_LIBPTHREAD |
#ifdef HAVE_LIBPTHREAD |
pthread_mutex_lock(&r->root_mtx[taskUSER]); |
pthread_mutex_lock(&r->root_mtx[taskUSER]); |
Line 733 sched_hook_fetch(void *root, void *arg __unused)
|
Line 752 sched_hook_fetch(void *root, void *arg __unused)
|
break; |
break; |
} |
} |
break; |
break; |
|
#endif |
} |
} |
if (kevent(r->root_kq, evt, 1, NULL, 0, &now) == -1) { |
if (kevent(r->root_kq, evt, 1, NULL, 0, &now) == -1) { |
if (r->root_hooks.hook_exec.exception) { |
if (r->root_hooks.hook_exec.exception) { |