X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1d2bb375b9ae908bb16a65a15e421d4bec2fb154..5c856ab29791883f3ca4f8d526bac816cb08546d:/src/msg/m_process.c diff --git a/src/msg/m_process.c b/src/msg/m_process.c index 67d2328da5..924f80db5b 100644 --- a/src/msg/m_process.c +++ b/src/msg/m_process.c @@ -51,7 +51,6 @@ static void MSG_process_cleanup(void *arg) xbt_free(arg); } - m_process_t MSG_process_create_with_arguments(const char *name, m_process_code_t code, void *data, m_host_t host, int argc, char **argv) @@ -99,6 +98,13 @@ m_process_t MSG_process_create_with_arguments(const char *name, return process; } +void MSG_process_free(m_process_t process) +{ + xbt_fifo_remove(msg_global->process_list,process); + xbt_context_free(process->simdata->context); + MSG_process_cleanup(process); +} + /** \ingroup m_process_management * \brief Migrates an agent to another location. * @@ -277,21 +283,25 @@ MSG_error_t MSG_process_suspend(m_process_t process) simdata_task = simdata->waiting_task->simdata; + simdata->suspended = 1; + if(simdata->blocked) return MSG_OK; + xbt_assert0(((simdata_task->compute)||(simdata_task->comm))&& - !((simdata_task->comm)&&(simdata_task->comm)), + !((simdata_task->compute)&&(simdata_task->comm)), "Got a problem in deciding which action to choose !"); simdata->suspended = 1; if(simdata_task->compute) - surf_workstation_resource->extension_public->suspend(simdata_task->compute); + surf_workstation_resource->common_public->suspend(simdata_task->compute); else - surf_workstation_resource->extension_public->suspend(simdata_task->comm); + surf_workstation_resource->common_public->suspend(simdata_task->comm); } else { m_task_t dummy = MSG_TASK_UNINITIALIZED; dummy = MSG_task_create("suspended", 0.0, 0, NULL); + simdata = process->simdata; simdata->suspended = 1; __MSG_task_execute(process,dummy); - surf_workstation_resource->extension_public->suspend(dummy->simdata->compute); + surf_workstation_resource->common_public->suspend(dummy->simdata->compute); __MSG_wait_for_computation(process,dummy); simdata->suspended = 0; @@ -330,9 +340,9 @@ MSG_error_t MSG_process_resume(m_process_t process) if(simdata_task->compute) - surf_workstation_resource->extension_public->resume(simdata_task->compute); + surf_workstation_resource->common_public->resume(simdata_task->compute); else - surf_workstation_resource->extension_public->resume(simdata_task->comm); + surf_workstation_resource->common_public->resume(simdata_task->comm); MSG_RETURN(MSG_OK); } @@ -354,7 +364,7 @@ int MSG_process_isSuspended(m_process_t process) -MSG_error_t __MSG_process_block() +MSG_error_t __MSG_process_block(void) { m_process_t process = MSG_process_self(); @@ -363,7 +373,7 @@ MSG_error_t __MSG_process_block() process->simdata->blocked=1; __MSG_task_execute(process,dummy); - surf_workstation_resource->extension_public->suspend(dummy->simdata->compute); + surf_workstation_resource->common_public->suspend(dummy->simdata->compute); __MSG_wait_for_computation(process,dummy); process->simdata->blocked=0; @@ -393,7 +403,7 @@ MSG_error_t __MSG_process_unblock(m_process_t process) xbt_assert0(simdata->blocked,"Process not blocked"); - surf_workstation_resource->extension_public->resume(simdata_task->compute); + surf_workstation_resource->common_public->resume(simdata_task->compute); MSG_RETURN(MSG_OK); }