version 1.8.2.1, 2012/05/30 08:07:45
|
version 1.9.2.1, 2012/05/31 14:17:59
|
Line 102 schedRegisterHooks(sched_root_task_t * __restrict root
|
Line 102 schedRegisterHooks(sched_root_task_t * __restrict root
|
root->root_hooks.hook_add.read = sched_hook_read; |
root->root_hooks.hook_add.read = sched_hook_read; |
root->root_hooks.hook_add.write = sched_hook_write; |
root->root_hooks.hook_add.write = sched_hook_write; |
root->root_hooks.hook_add.alarm = sched_hook_alarm; |
root->root_hooks.hook_add.alarm = sched_hook_alarm; |
|
root->root_hooks.hook_add.node = sched_hook_node; |
|
root->root_hooks.hook_add.proc = sched_hook_proc; |
|
root->root_hooks.hook_add.user = sched_hook_user; |
|
root->root_hooks.hook_add.signal = sched_hook_signal; |
|
|
root->root_hooks.hook_exec.cancel = sched_hook_cancel; |
root->root_hooks.hook_exec.cancel = sched_hook_cancel; |
root->root_hooks.hook_exec.fetch = sched_hook_fetch; |
root->root_hooks.hook_exec.fetch = sched_hook_fetch; |
Line 153 schedInit(void ** __restrict data, size_t datlen)
|
Line 157 schedInit(void ** __restrict data, size_t datlen)
|
|
|
TAILQ_INIT(&root->root_read); |
TAILQ_INIT(&root->root_read); |
TAILQ_INIT(&root->root_write); |
TAILQ_INIT(&root->root_write); |
TAILQ_INIT(&root->root_alarm); |
|
TAILQ_INIT(&root->root_timer); |
TAILQ_INIT(&root->root_timer); |
|
TAILQ_INIT(&root->root_alarm); |
|
TAILQ_INIT(&root->root_node); |
|
TAILQ_INIT(&root->root_proc); |
|
TAILQ_INIT(&root->root_user); |
|
TAILQ_INIT(&root->root_signal); |
TAILQ_INIT(&root->root_event); |
TAILQ_INIT(&root->root_event); |
TAILQ_INIT(&root->root_eventlo); |
TAILQ_INIT(&root->root_eventlo); |
TAILQ_INIT(&root->root_ready); |
TAILQ_INIT(&root->root_ready); |
Line 206 schedEnd(sched_root_task_t ** __restrict root)
|
Line 214 schedEnd(sched_root_task_t ** __restrict root)
|
TAILQ_FOREACH_SAFE(task, &(*root)->root_write, task_node, tmp) { |
TAILQ_FOREACH_SAFE(task, &(*root)->root_write, task_node, tmp) { |
schedCancel(task); |
schedCancel(task); |
} |
} |
|
TAILQ_FOREACH_SAFE(task, &(*root)->root_timer, task_node, tmp) { |
|
schedCancel(task); |
|
} |
TAILQ_FOREACH_SAFE(task, &(*root)->root_alarm, task_node, tmp) { |
TAILQ_FOREACH_SAFE(task, &(*root)->root_alarm, task_node, tmp) { |
schedCancel(task); |
schedCancel(task); |
} |
} |
TAILQ_FOREACH_SAFE(task, &(*root)->root_timer, task_node, tmp) { | TAILQ_FOREACH_SAFE(task, &(*root)->root_node, task_node, tmp) { |
schedCancel(task); |
schedCancel(task); |
} |
} |
|
TAILQ_FOREACH_SAFE(task, &(*root)->root_proc, task_node, tmp) { |
|
schedCancel(task); |
|
} |
|
TAILQ_FOREACH_SAFE(task, &(*root)->root_user, task_node, tmp) { |
|
schedCancel(task); |
|
} |
|
TAILQ_FOREACH_SAFE(task, &(*root)->root_signal, task_node, tmp) { |
|
schedCancel(task); |
|
} |
TAILQ_FOREACH_SAFE(task, &(*root)->root_event, task_node, tmp) { |
TAILQ_FOREACH_SAFE(task, &(*root)->root_event, task_node, tmp) { |
schedCancel(task); |
schedCancel(task); |
} |
} |
Line 293 schedFetch(sched_root_task_t * __restrict root)
|
Line 313 schedFetch(sched_root_task_t * __restrict root)
|
} |
} |
|
|
/* |
/* |
|
* schedTrigger() - Triggering USER task |
|
* |
|
* @task = task |
|
* return: -1 error or 0 ok |
|
*/ |
|
int |
|
schedTrigger(sched_task_t * __restrict task) |
|
{ |
|
struct kevent chg[1]; |
|
struct timespec timeout = { 0, 0 }; |
|
|
|
if (!task || !TASK_ROOT(task)) |
|
return -1; |
|
|
|
#ifdef __NetBSD__ |
|
EV_SET(chg, TASK_VAL(task), EVFILT_USER, 0, NOTE_TRIGGER, 0, (intptr_t) TASK_VAL(task)); |
|
#else |
|
EV_SET(chg, TASK_VAL(task), EVFILT_USER, 0, NOTE_TRIGGER, 0, (void*) TASK_VAL(task)); |
|
#endif |
|
if (kevent(TASK_ROOT(task)->root_kq, chg, 1, NULL, 0, &timeout) == -1) { |
|
LOGERR; |
|
return -1; |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
/* |
* schedCancel() - Cancel task from scheduler |
* schedCancel() - Cancel task from scheduler |
* |
* |
* @task = task |
* @task = task |
Line 317 schedCancel(sched_task_t * __restrict task)
|
Line 365 schedCancel(sched_task_t * __restrict task)
|
case taskWRITE: |
case taskWRITE: |
queue = &TASK_ROOT(task)->root_write; |
queue = &TASK_ROOT(task)->root_write; |
break; |
break; |
|
case taskTIMER: |
|
queue = &TASK_ROOT(task)->root_timer; |
|
break; |
case taskALARM: |
case taskALARM: |
queue = &TASK_ROOT(task)->root_alarm; |
queue = &TASK_ROOT(task)->root_alarm; |
break; |
break; |
case taskTIMER: | case taskNODE: |
queue = &TASK_ROOT(task)->root_timer; | queue = &TASK_ROOT(task)->root_node; |
break; |
break; |
|
case taskPROC: |
|
queue = &TASK_ROOT(task)->root_proc; |
|
break; |
|
case taskUSER: |
|
queue = &TASK_ROOT(task)->root_user; |
|
break; |
|
case taskSIGNAL: |
|
queue = &TASK_ROOT(task)->root_signal; |
|
break; |
case taskEVENT: |
case taskEVENT: |
queue = &TASK_ROOT(task)->root_event; |
queue = &TASK_ROOT(task)->root_event; |
break; |
break; |
Line 355 schedCancel(sched_task_t * __restrict task)
|
Line 415 schedCancel(sched_task_t * __restrict task)
|
* |
* |
* @root = root task |
* @root = root task |
* @type = cancel from queue type, if =taskMAX cancel same task from all queues |
* @type = cancel from queue type, if =taskMAX cancel same task from all queues |
* @criteria = find task by criteria [CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL|CRITERIA_TS] | * @criteria = find task by criteria [CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL|CRITERIA_TS|CRITERIA_DATA] |
* @param = search parameter |
* @param = search parameter |
* @hook = custom cleanup hook function, may be NULL |
* @hook = custom cleanup hook function, may be NULL |
* return: -1 error, -2 error in sub-stage cancel execution, -3 error from custom hook or 0 ok |
* return: -1 error, -2 error in sub-stage cancel execution, -3 error from custom hook or 0 ok |
Line 375 schedCancelby(sched_root_task_t * __restrict root, sch
|
Line 435 schedCancelby(sched_root_task_t * __restrict root, sch
|
return -2; |
return -2; |
if (schedCancelby(root, taskWRITE, criteria, param, hook)) |
if (schedCancelby(root, taskWRITE, criteria, param, hook)) |
return -2; |
return -2; |
|
if (schedCancelby(root, taskTIMER, criteria, param, hook)) |
|
return -2; |
if (schedCancelby(root, taskALARM, criteria, param, hook)) |
if (schedCancelby(root, taskALARM, criteria, param, hook)) |
return -2; |
return -2; |
if (schedCancelby(root, taskTIMER, criteria, param, hook)) | if (schedCancelby(root, taskNODE, criteria, param, hook)) |
return -2; |
return -2; |
|
if (schedCancelby(root, taskPROC, criteria, param, hook)) |
|
return -2; |
|
if (schedCancelby(root, taskUSER, criteria, param, hook)) |
|
return -2; |
|
if (schedCancelby(root, taskSIGNAL, criteria, param, hook)) |
|
return -2; |
if (schedCancelby(root, taskEVENT, criteria, param, hook)) |
if (schedCancelby(root, taskEVENT, criteria, param, hook)) |
return -2; |
return -2; |
if (schedCancelby(root, taskEVENTLO, criteria, param, hook)) |
if (schedCancelby(root, taskEVENTLO, criteria, param, hook)) |
Line 394 schedCancelby(sched_root_task_t * __restrict root, sch
|
Line 462 schedCancelby(sched_root_task_t * __restrict root, sch
|
case taskWRITE: |
case taskWRITE: |
queue = &root->root_write; |
queue = &root->root_write; |
break; |
break; |
|
case taskTIMER: |
|
queue = &root->root_timer; |
|
break; |
case taskALARM: |
case taskALARM: |
queue = &root->root_alarm; |
queue = &root->root_alarm; |
break; |
break; |
case taskTIMER: | case taskNODE: |
queue = &root->root_timer; | queue = &root->root_node; |
break; |
break; |
|
case taskPROC: |
|
queue = &root->root_proc; |
|
break; |
|
case taskUSER: |
|
queue = &root->root_user; |
|
break; |
|
case taskSIGNAL: |
|
queue = &root->root_signal; |
|
break; |
case taskEVENT: |
case taskEVENT: |
queue = &root->root_event; |
queue = &root->root_event; |
break; |
break; |
Line 437 schedCancelby(sched_root_task_t * __restrict root, sch
|
Line 517 schedCancelby(sched_root_task_t * __restrict root, sch
|
break; |
break; |
case CRITERIA_TS: |
case CRITERIA_TS: |
if (!sched_timespeccmp(&TASK_TS(task), (struct timespec*) param, -)) |
if (!sched_timespeccmp(&TASK_TS(task), (struct timespec*) param, -)) |
|
flg = 1; |
|
break; |
|
case CRITERIA_DATA: |
|
if (TASK_DATA(task) == param) |
flg = 1; |
flg = 1; |
break; |
break; |
default: |
default: |