version 1.9.2.1, 2012/05/31 14:17:59
|
version 1.9.2.2, 2012/05/31 21:36:40
|
Line 208 schedEnd(sched_root_task_t ** __restrict root)
|
Line 208 schedEnd(sched_root_task_t ** __restrict root)
|
if (!root || !*root) |
if (!root || !*root) |
return -1; |
return -1; |
|
|
TAILQ_FOREACH_SAFE(task, &(*root)->root_read, task_node, tmp) { | TAILQ_FOREACH_SAFE(task, &(*root)->root_read, task_node, tmp) |
schedCancel(task); |
schedCancel(task); |
} | 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) |
TAILQ_FOREACH_SAFE(task, &(*root)->root_timer, task_node, tmp) { | |
schedCancel(task); |
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_node, 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) |
TAILQ_FOREACH_SAFE(task, &(*root)->root_proc, task_node, tmp) { | |
schedCancel(task); |
schedCancel(task); |
} | TAILQ_FOREACH_SAFE(task, &(*root)->root_user, task_node, tmp) |
TAILQ_FOREACH_SAFE(task, &(*root)->root_user, task_node, tmp) { | |
schedCancel(task); |
schedCancel(task); |
} | TAILQ_FOREACH_SAFE(task, &(*root)->root_signal, task_node, tmp) |
TAILQ_FOREACH_SAFE(task, &(*root)->root_signal, task_node, tmp) { | |
schedCancel(task); |
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); |
} | TAILQ_FOREACH_SAFE(task, &(*root)->root_eventlo, task_node, tmp) |
TAILQ_FOREACH_SAFE(task, &(*root)->root_eventlo, task_node, tmp) { | |
schedCancel(task); |
schedCancel(task); |
} | TAILQ_FOREACH_SAFE(task, &(*root)->root_ready, task_node, tmp) |
TAILQ_FOREACH_SAFE(task, &(*root)->root_ready, task_node, tmp) { | |
schedCancel(task); |
schedCancel(task); |
} |
|
|
|
#ifdef HAVE_LIBPTHREAD |
#ifdef HAVE_LIBPTHREAD |
pthread_mutex_lock(&(*root)->root_mtx[taskUNUSE]); |
pthread_mutex_lock(&(*root)->root_mtx[taskUNUSE]); |
#endif |
#endif |
while ((task = TAILQ_FIRST(&(*root)->root_unuse))) { | TAILQ_FOREACH_SAFE(task, &(*root)->root_unuse, task_node, tmp) { |
TAILQ_REMOVE(&(*root)->root_unuse, task, task_node); |
TAILQ_REMOVE(&(*root)->root_unuse, task, task_node); |
free(task); |
free(task); |
} |
} |
Line 283 schedCall(sched_task_t * __restrict task)
|
Line 272 schedCall(sched_task_t * __restrict task)
|
if (!TASK_ISLOCKED(task)) |
if (!TASK_ISLOCKED(task)) |
TASK_LOCK(task); |
TASK_LOCK(task); |
|
|
task->task_id++; |
|
ptr = task->task_func(task); |
ptr = task->task_func(task); |
|
|
TASK_UNLOCK(task); |
TASK_UNLOCK(task); |
Line 399 schedCancel(sched_task_t * __restrict task)
|
Line 387 schedCancel(sched_task_t * __restrict task)
|
#ifdef HAVE_LIBPTHREAD |
#ifdef HAVE_LIBPTHREAD |
pthread_mutex_lock(&TASK_ROOT(task)->root_mtx[TASK_TYPE(task)]); |
pthread_mutex_lock(&TASK_ROOT(task)->root_mtx[TASK_TYPE(task)]); |
#endif |
#endif |
TAILQ_REMOVE(queue, task, task_node); | TAILQ_REMOVE(queue, TASK_ID(task), task_node); |
#ifdef HAVE_LIBPTHREAD |
#ifdef HAVE_LIBPTHREAD |
pthread_mutex_unlock(&TASK_ROOT(task)->root_mtx[TASK_TYPE(task)]); |
pthread_mutex_unlock(&TASK_ROOT(task)->root_mtx[TASK_TYPE(task)]); |
#endif |
#endif |
Line 415 schedCancel(sched_task_t * __restrict task)
|
Line 403 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_DATA] | * @criteria = find task by criteria |
| * [CRITERIA_ANY|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 430 schedCancelby(sched_root_task_t * __restrict root, sch
|
Line 419 schedCancelby(sched_root_task_t * __restrict root, sch
|
|
|
if (!root) |
if (!root) |
return -1; |
return -1; |
|
/* if type == taskMAX check in all queues */ |
if (type == taskMAX) { |
if (type == taskMAX) { |
if (schedCancelby(root, taskREAD, criteria, param, hook)) |
if (schedCancelby(root, taskREAD, criteria, param, hook)) |
return -2; |
return -2; |
Line 455 schedCancelby(sched_root_task_t * __restrict root, sch
|
Line 445 schedCancelby(sched_root_task_t * __restrict root, sch
|
return -2; |
return -2; |
return 0; |
return 0; |
} |
} |
|
/* choosen queue */ |
switch (type) { |
switch (type) { |
case taskREAD: |
case taskREAD: |
queue = &root->root_read; |
queue = &root->root_read; |
Line 499 schedCancelby(sched_root_task_t * __restrict root, sch
|
Line 490 schedCancelby(sched_root_task_t * __restrict root, sch
|
TAILQ_FOREACH_SAFE(task, queue, task_node, tmp) { |
TAILQ_FOREACH_SAFE(task, queue, task_node, tmp) { |
flg ^= flg; |
flg ^= flg; |
switch (criteria) { |
switch (criteria) { |
|
case CRITERIA_ANY: |
|
flg = 1; |
|
break; |
case CRITERIA_CALL: |
case CRITERIA_CALL: |
if (TASK_FUNC(task) == (sched_task_func_t) param) |
if (TASK_FUNC(task) == (sched_task_func_t) param) |
flg = 1; |
flg = 1; |
Line 527 schedCancelby(sched_root_task_t * __restrict root, sch
|
Line 521 schedCancelby(sched_root_task_t * __restrict root, sch
|
sched_SetErr(EINVAL, "Invalid parameter criteria %d", criteria); |
sched_SetErr(EINVAL, "Invalid parameter criteria %d", criteria); |
flg = -1; |
flg = -1; |
} |
} |
if (flg < 0) | if (flg < 0) /* error */ |
break; |
break; |
/* cancel choosen task */ |
/* cancel choosen task */ |
if (flg > 0) { |
if (flg > 0) { |