-/* Copyright (c) 2004-2013. The SimGrid Team.
+/* Copyright (c) 2004-2014. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#include "msg_private.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
+#include "simix/smx_process_private.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_process, msg,
"Logging specific to MSG (process)");
/* This function creates a MSG process. It has the prototype enforced by SIMIX_function_register_process_create */
void MSG_process_create_from_SIMIX(smx_process_t* process, const char *name,
- xbt_main_func_t code, void *data,
- const char *hostname, double kill_time, int argc, char **argv,
- xbt_dict_t properties, int auto_restart)
+ xbt_main_func_t code, void *data,
+ const char *hostname, double kill_time,
+ int argc, char **argv,
+ xbt_dict_t properties, int auto_restart,
+ smx_process_t parent_process)
{
msg_host_t host = MSG_get_host_by_name(hostname);
msg_process_t p = MSG_process_create_with_environment(name, code, data,
simcall_process_create(&process, name, code, simdata, sg_host_name(host), -1,
argc, argv, properties,0);
- #ifdef HAVE_TRACING
- TRACE_msg_process_create(name, simcall_process_get_PID(process), simdata->m_host);
- #endif
+#ifdef HAVE_TRACING
+ TRACE_msg_process_create(name, SIMIX_process_get_PID(process), host);
+#endif
if (!process) {
/* Undo everything we have just changed */
}
else {
#ifdef HAVE_TRACING
- simcall_process_on_exit(process,(int_f_pvoid_t)TRACE_msg_process_kill,MSG_process_self());
+ simcall_process_on_exit(process,(int_f_pvoid_pvoid_t)TRACE_msg_process_kill,process);
#endif
}
return process;
// if (p_simdata->waiting_task && p_simdata->waiting_task->simdata->comm) {
// simcall_comm_cancel(p_simdata->waiting_task->simdata->comm);
// }
-
+
simcall_process_kill(process);
return;
}
+/**
+* \brief Wait for the completion of a #msg_process_t.
+*
+* \param process the process to wait for
+* \param timeout wait until the process is over, or the timeout occurs
+*/
+msg_error_t MSG_process_join(msg_process_t process, double timeout){
+ simcall_process_join(process, timeout);
+ return MSG_OK;
+}
+
/** \ingroup m_process_management
* \brief Migrates a process to another location.
*
* The on_exit functions are the functions executed when your process is killed.
* You should use them to free the data used by your process.
*/
-void MSG_process_on_exit(int_f_pvoid_t fun, void *data) {
+void MSG_process_on_exit(int_f_pvoid_pvoid_t fun, void *data) {
simcall_process_on_exit(MSG_process_self(),fun,data);
}
/**