int workstation_count; /* number of workstations */
xbt_dict_t links; /* link list */
xbt_dynar_t tasks; /* task list */
+ int watch_point_reached; /* has a task just reached a watch point? */
/* task state sets */
xbt_swag_t not_scheduled_task_set;
xbt_swag_t running_task_set;
xbt_swag_t done_task_set;
xbt_swag_t failed_task_set;
+
} s_SD_global_t, *SD_global_t;
extern SD_global_t sd_global;
sd_global->workstation_count = 0;
sd_global->links = xbt_dict_new();
sd_global->tasks = xbt_dynar_new(sizeof(SD_task_t), NULL);
+ sd_global->watch_point_reached = 0;
s_SD_task_t task;
sd_global->not_scheduled_task_set = xbt_swag_new(xbt_swag_offset(task, state_hookup));
double total_time = 0.0; /* we stop the simulation when total_time >= how_long */
double elapsed_time = 0.0;
- int watch_point_reached = 0;
int i;
SD_task_t task;
surf_action_t surf_action;
surf_solve(); /* Takes traces into account. Returns 0.0 */
/* main loop */
- while (elapsed_time >= 0.0 && total_time < how_long && !watch_point_reached) {
+ while (elapsed_time >= 0.0 && total_time < how_long && !sd_global->watch_point_reached) {
for (i = 0 ; i < xbt_dynar_length(sd_global->tasks); i++) {
xbt_dynar_get_cpy(sd_global->tasks, i, &task);
printf("Examining task '%s'...\n", SD_task_get_name(task));
return SD_FAILED;
}
-/* Changes the state of a task and update the swags.
+/* Changes the state of a task. Update the swags and the flag sd_global->watch_point_reached.
*/
static void __SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) {
xbt_swag_remove(task, task->state_set);
default: /* SD_FAILED */
task->state_set = sd_global->failed_task_set;
}
+
+ if (task->watch_points & new_state) {
+ printf("Watch point reached with task '%s' in state %d!\n", SD_task_get_name(task), new_state);
+ sd_global->watch_point_reached = 1;
+ }
}
/* Sets the data of a task.
SD_task_unwatch(taskA, SD_SCHEDULED);
SD_task_watch(taskA, SD_DONE);
SD_task_watch(taskA, SD_SCHEDULED);*/
-
+
+ SD_task_watch(taskA, SD_SCHEDULED);
+
/* let's launch the simulation! */
int workstation_number = 2;
};
double rate = 1;
- printf("Scheduling task A (state = %d)...\n", SD_task_get_state(taskA));
+ /* printf("Scheduling task A (state = %d)...\n", SD_task_get_state(taskA));*/
SD_task_schedule(taskA, workstation_number, workstation_list,
- computation_amount, communication_amount, rate);
- printf("Done. Task A state: %d\n", SD_task_get_state(taskA));
+ computation_amount, communication_amount, rate);
+ /* printf("Done. Task A state: %d\n", SD_task_get_state(taskA));*/
printf("Launching simulation...\n");
SD_simulate(100);