#include "xbt/sysdep.h"
#include "xbt/log.h"
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_process, msg, "Logging specific to MSG (process)");
+
/** \defgroup m_process_management Management Functions of Agents
* \brief This section describes the agent structure of MSG
* (#m_process_t) and the functions for managing it.
/* Simulator Data */
simdata->PID = msg_global->PID++;
+ simdata->waiting_task = NULL;
simdata->host = host;
simdata->argc = argc;
simdata->argv = argv;
*/
void MSG_process_kill(m_process_t process)
{
-
- /*
- int i;
simdata_process_t p_simdata = process->simdata;
- simdata_host_t h_simdata= p_simdata->host->simdata;
- int _cursor;
- m_process_t proc = NULL;
DEBUG3("Killing %s(%d) on %s",process->name, p_simdata->PID, p_simdata->host->name);
- for (i=0; i<msg_global->max_channel; i++) {
- if (h_simdata->sleeping[i] == process) {
- h_simdata->sleeping[i] = NULL;
- break;
- }
- }
-
- if(p_simdata->waiting_task) {
- xbt_dynar_foreach(p_simdata->waiting_task->simdata->sleeping,_cursor,proc) {
- if(proc==process)
- xbt_dynar_remove_at(p_simdata->waiting_task->simdata->sleeping,_cursor,&proc);
- }
- if(p_simdata->waiting_task->simdata->compute)
- surf_workstation_resource->common_public->
- action_free(p_simdata->waiting_task->simdata->compute);
+ if(p_simdata->waiting_task) {
+ DEBUG1("Canceling waiting task %s",p_simdata->waiting_task->name);
+ if(p_simdata->waiting_task->simdata->compute) {
+ SIMIX_action_cancel(p_simdata->waiting_task->simdata->compute);
+ }
else if (p_simdata->waiting_task->simdata->comm) {
- surf_workstation_resource->common_public->
- action_change_state(p_simdata->waiting_task->simdata->comm,SURF_ACTION_FAILED);
- surf_workstation_resource->common_public->
- action_free(p_simdata->waiting_task->simdata->comm);
- } else {
- xbt_die("UNKNOWN STATUS. Please report this bug.");
- }
- }
-
- if ((i==msg_global->max_channel) && (process!=MSG_process_self()) &&
- (!p_simdata->waiting_task)) {
- xbt_die("UNKNOWN STATUS. Please report this bug.");
+ SIMIX_action_cancel(p_simdata->waiting_task->simdata->comm);
+ }
}
-*/
+
xbt_fifo_remove(msg_global->process_list,process);
SIMIX_process_kill(process->simdata->smx_process);
smx_process_t proc = SIMIX_process_self();
if (proc != NULL) {
return (m_process_t)proc->data;
- }
+ }
else {
return NULL;
}