summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6df282b)
We are going to store not only the (negative) error code in this field
of struct task, so status is a better name for it. The conversion is
trivial.
/** Copied from the task_info struct during task_register(). */
int (*post_select)(struct sched *s, struct task *t);
/** Whether this task is active (>=0) or in error state (<0). */
/** Copied from the task_info struct during task_register(). */
int (*post_select)(struct sched *s, struct task *t);
/** Whether this task is active (>=0) or in error state (<0). */
/** Position of the task in the task list of the scheduler. */
struct list_head node;
/** If less than zero, the task was notified by another task. */
/** Position of the task in the task list of the scheduler. */
struct list_head node;
/** If less than zero, the task was notified by another task. */
struct task *t, *tmp;
list_for_each_entry_safe(t, tmp, &s->task_list, node) {
struct task *t, *tmp;
list_for_each_entry_safe(t, tmp, &s->task_list, node) {
continue;
if (t->notification != 0)
sched_min_delay(s);
continue;
if (t->notification != 0)
sched_min_delay(s);
static inline void call_post_select(struct sched *s, struct task *t)
{
#ifndef SCHED_DEBUG
static inline void call_post_select(struct sched *s, struct task *t)
{
#ifndef SCHED_DEBUG
- t->error = t->post_select(s, t);
+ t->status = t->post_select(s, t);
#else
struct timeval t1, t2, diff;
unsigned long pst;
clock_get_realtime(&t1);
#else
struct timeval t1, t2, diff;
unsigned long pst;
clock_get_realtime(&t1);
- t->error = t->post_select(s, t);
+ t->status = t->post_select(s, t);
clock_get_realtime(&t2);
tv_diff(&t1, &t2, &diff);
pst = tv2ms(&diff);
clock_get_realtime(&t2);
tv_diff(&t1, &t2, &diff);
pst = tv2ms(&diff);
unsigned num_running_tasks = 0;
list_for_each_entry_safe(t, tmp, &s->task_list, node) {
unsigned num_running_tasks = 0;
list_for_each_entry_safe(t, tmp, &s->task_list, node) {
if (t->dead) /* task has been reaped */
unlink_and_free_task(t);
continue;
}
call_post_select(s, t);
t->notification = 0;
if (t->dead) /* task has been reaped */
unlink_and_free_task(t);
continue;
}
call_post_select(s, t);
t->notification = 0;
num_running_tasks++;
}
return num_running_tasks;
num_running_tasks++;
}
return num_running_tasks;
t = *tptr;
if (!t)
return 0;
t = *tptr;
if (!t)
return 0;
return 0;
if (t->dead) /* will be freed in sched_post_select() */
return 0;
return 0;
if (t->dead) /* will be freed in sched_post_select() */
return 0;
*/
t->dead = true;
*tptr = NULL;
*/
t->dead = true;
*tptr = NULL;
struct task *t, *tmp;
list_for_each_entry_safe(t, tmp, &s->task_list, node) {
struct task *t, *tmp;
list_for_each_entry_safe(t, tmp, &s->task_list, node) {
/* The task list should contain only terminated tasks. */
PARA_WARNING_LOG("shutting down running task %s\n",
t->name);
/* The task list should contain only terminated tasks. */
PARA_WARNING_LOG("shutting down running task %s\n",
t->name);
snprintf(t->name, sizeof(t->name) - 1, "%s", info->name);
t->name[sizeof(t->name) - 1] = '\0';
t->notification = 0;
snprintf(t->name, sizeof(t->name) - 1, "%s", info->name);
t->name[sizeof(t->name) - 1] = '\0';
t->notification = 0;
t->dead = false;
t->pre_select = info->pre_select;
t->post_select = info->post_select;
t->dead = false;
t->pre_select = info->pre_select;
t->post_select = info->post_select;
list_for_each_entry_safe(t, tmp, &s->task_list, node) {
char *tmp_msg;
tmp_msg = make_message("%s%p\t%s\t%s\n", msg? msg : "", t,
list_for_each_entry_safe(t, tmp, &s->task_list, node) {
char *tmp_msg;
tmp_msg = make_message("%s%p\t%s\t%s\n", msg? msg : "", t,
- t->error < 0? (t->dead? "dead" : "zombie") : "running",
+ t->status < 0? (t->dead? "dead" : "zombie") : "running",
t->name);
free(msg);
msg = tmp_msg;
t->name);
free(msg);
msg = tmp_msg;
return 0;
if (t->dead)
return 0;
return 0;
if (t->dead)
return 0;