/* * Update the state of a specific task ID in a specific task_state structure */ extern void task_state_update(task_state_t ts, int task_id, task_state_type_t t) { xassert(ts != NULL); xassert(task_id >= 0); xassert(task_id < ts->n_tasks); if (ts->pack_group == NO_VAL) { debug3("%s: step=%u.%u task_id=%d, %s", __func__, ts->job_id, ts->step_id, task_id, _task_state_type_str(t)); } else { debug3("%s: step=%u.%u pack_group=%u task_id=%d, %s", __func__, ts->job_id, ts->step_id, ts->pack_group, task_id, _task_state_type_str(t)); } switch (t) { case TS_START_SUCCESS: bit_set (ts->running, task_id); ts->n_started++; break; case TS_START_FAILURE: bit_set (ts->start_failed, task_id); break; case TS_NORMAL_EXIT: bit_clear(ts->running, task_id); if (bit_test(ts->normal_exit, task_id) || bit_test(ts->abnormal_exit, task_id)) { error("Task %d reported exit for a second time.", task_id); } else { bit_set (ts->normal_exit, task_id); ts->n_exited++; } break; case TS_ABNORMAL_EXIT: bit_clear(ts->running, task_id); if (bit_test(ts->normal_exit, task_id) || bit_test(ts->abnormal_exit, task_id)) { error("Task %d reported exit for a second time.", task_id); } else { bit_set (ts->abnormal_exit, task_id); ts->n_exited++; ts->n_abnormal++; } break; } xassert((bit_set_count(ts->abnormal_exit) + bit_set_count(ts->normal_exit)) == ts->n_exited); }
void task_state_update (task_state_t ts, int taskid, task_state_type_t t) { xassert (ts != NULL); xassert (taskid >= 0); xassert (taskid < ts->n_tasks); debug3("task_state_update(taskid=%d, %s)", taskid, _task_state_type_str (t)); switch (t) { case TS_START_SUCCESS: bit_set (ts->running, taskid); ts->n_started++; break; case TS_START_FAILURE: bit_set (ts->start_failed, taskid); break; case TS_NORMAL_EXIT: bit_clear (ts->running, taskid); if (bit_test(ts->normal_exit, taskid)) { error("Task %d reported exit for a second time.", taskid); } else { bit_set (ts->normal_exit, taskid); ts->n_exited++; } break; case TS_ABNORMAL_EXIT: bit_clear (ts->running, taskid); if (bit_test(ts->abnormal_exit, taskid)) { error("Task %d reported exit for a second time.", taskid); } else { bit_set (ts->abnormal_exit, taskid); ts->n_exited++; ts->n_abnormal++; } break; } xassert ((bit_set_count(ts->abnormal_exit) + bit_set_count(ts->normal_exit)) == ts->n_exited); }