simix_global = xbt_new0(s_SIMIX_Global_t,1);
- xbt_context_init();
simix_global->host = xbt_fifo_new();
simix_global->process_to_run = xbt_swag_new(xbt_swag_offset(proc,synchro_hookup));
simix_global->process_list = xbt_swag_new(xbt_swag_offset(proc,process_hookup));
simix_global->current_process = NULL;
simix_global->registered_functions = xbt_dict_new();
+
+ simix_global->create_process_function = NULL;
+ simix_global->kill_process_function = NULL;
}
}
/* List the process and their state */
INFO0("SIMIX: <process> on <host>: <status>.");
xbt_swag_foreach(process, simix_global->process_list) {
- simdata_process_t p_simdata = (simdata_process_t) process->simdata;
+ smx_simdata_process_t p_simdata = (smx_simdata_process_t) process->simdata;
// simdata_host_t h_simdata=(simdata_host_t)p_simdata->host->simdata;
char *who;
xbt_fifo_item_t _cursor;
DEBUG1("** %s failed **",smx_action->name);
- xbt_fifo_foreach(smx_action->simdata->cond_list,_cursor,cond,smx_cond_t) {
+ xbt_fifo_foreach(smx_action->cond_list,_cursor,cond,smx_cond_t) {
xbt_swag_foreach(process,cond->sleeping) {
DEBUG2("\t preparing to wake up %s on %s",
process->name, process->simdata->host->name);
}
SIMIX_cond_broadcast(cond);
/* remove conditional from action */
- xbt_fifo_remove(smx_action->simdata->cond_list,cond);
+ xbt_fifo_remove(smx_action->cond_list,cond);
}
}
xbt_fifo_item_t _cursor;
DEBUG1("** %s done **",smx_action->name);
- xbt_fifo_foreach(smx_action->simdata->cond_list,_cursor,cond,smx_cond_t) {
+ xbt_fifo_foreach(smx_action->cond_list,_cursor,cond,smx_cond_t) {
xbt_swag_foreach(process,cond->sleeping) {
DEBUG2("\t preparing to wake up %s on %s",
process->name, process->simdata->host->name);
}
SIMIX_cond_broadcast(cond);
/* remove conditional from action */
- xbt_fifo_remove(smx_action->simdata->cond_list,cond);
+ xbt_fifo_remove(smx_action->cond_list,cond);
}
}
}
while((p=xbt_swag_extract(simix_global->process_list))) {
SIMIX_process_kill(p);
}
- xbt_context_exit();
xbt_fifo_foreach(simix_global->host,i,h,smx_host_t) {
__SIMIX_host_destroy(h);
smx_process_t process = NULL;
int i;
double elapsed_time = 0.0;
- int state_modifications = 0;
-
-
- //surf_solve(); /* Takes traces into account. Returns 0.0 I don't know what to do with this*/
+ static int state_modifications = 1;
+ static int first = 1;
xbt_context_empty_trash();
if(xbt_swag_size(simix_global->process_to_run) && (elapsed_time>0)) {
DEBUG0("**************************************************");
}
-
+ if (first) {
+ surf_solve();/* Takes traces into account. Returns 0.0 */
+ first=0;
+ }
while ((process = xbt_swag_extract(simix_global->process_to_run))) {
DEBUG2("Scheduling %s on %s",
process->name,
xbt_dynar_foreach(resource_list, i, resource) {
if(xbt_swag_size(resource->common_public->states.failed_action_set) ||
- xbt_swag_size(resource->common_public->states.done_action_set))
+ xbt_swag_size(resource->common_public->states.done_action_set)) {
state_modifications = 1;
+ }
}
if(!state_modifications) {
DEBUG2("got %p %p", fun, arg);
if(fun==SIMIX_process_create_with_arguments) {
process_arg_t args = arg;
- DEBUG2("Launching %s on %s", args->name, args->host->name);
+ DEBUG2("Launching %s on %s", args->name, args->hostname);
process = SIMIX_process_create_with_arguments(args->name, args->code,
- args->data, args->host,
- args->argc,args->argv);
+ args->data, args->hostname,
+ args->argc,args->argv,NULL);
if(args->kill_time > SIMIX_get_clock()) {
surf_timer_resource->extension_public->set(args->kill_time,
(void*) &SIMIX_process_kill,
}
}
}
+ state_modifications = 0;
if (elapsed_time == -1) {
if (xbt_swag_size(simix_global->process_list) == 0) {
{
return surf_timer_resource->extension_public->get(function, arg);
}
+
+
+void SIMIX_function_register_process_create(void * function)
+{
+ xbt_assert0((simix_global->create_process_function == NULL), "Data already set");
+
+ /* Assign create process */
+ simix_global->create_process_function = function;
+
+ return ;
+}
+void SIMIX_function_register_process_kill(void * function)
+{
+ xbt_assert0((simix_global->kill_process_function == NULL), "Data already set");
+
+ /* Assign kill process */
+ simix_global->kill_process_function = function;
+
+ return ;
+}