X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/364eee0fc6ab77fddc5437ac273527bd27711724..aec830b8423c13c5c31e3db71361a449bfacd8ed:/src/msg/msg_process.cpp?ds=sidebyside diff --git a/src/msg/msg_process.cpp b/src/msg/msg_process.cpp index 465e4cffef..a366f62ecc 100644 --- a/src/msg/msg_process.cpp +++ b/src/msg/msg_process.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -40,7 +40,7 @@ void MSG_process_cleanup_from_SIMIX(smx_actor_t smx_actor) simcall_process_set_data(smx_actor, nullptr); } - TRACE_msg_process_destroy(smx_actor->name.c_str(), smx_actor->pid); + TRACE_msg_process_destroy(smx_actor->name, smx_actor->pid); // free the data if a function was provided if (msg_actor && msg_actor->data && msg_global->process_data_cleanup) { msg_global->process_data_cleanup(msg_actor->data); @@ -52,7 +52,8 @@ void MSG_process_cleanup_from_SIMIX(smx_actor_t smx_actor) /* This function creates a MSG process. It has the prototype enforced by SIMIX_function_register_process_create */ smx_actor_t MSG_process_create_from_SIMIX(const char* name, std::function code, void* data, sg_host_t host, - std::map* properties, smx_actor_t parent_process) + std::map* properties, + smx_actor_t /*parent_process*/) { msg_process_t p = MSG_process_create_from_stdfunc(name, std::move(code), data, host, properties); return p == nullptr ? nullptr : p->getImpl(); @@ -213,7 +214,7 @@ void MSG_process_kill(msg_process_t process) * \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->getImpl(), timeout); + process->join(timeout); return MSG_OK; } @@ -271,21 +272,17 @@ msg_error_t MSG_process_set_data(msg_process_t process, void *data) * \brief Sets a cleanup function to be called to free the userdata of a process when a process is destroyed. * \param data_cleanup a cleanup function for the userdata of a process, or nullptr to call no function */ -XBT_PUBLIC(void) MSG_process_set_data_cleanup(void_f_pvoid_t data_cleanup) { +XBT_PUBLIC void MSG_process_set_data_cleanup(void_f_pvoid_t data_cleanup) +{ msg_global->process_data_cleanup = data_cleanup; } -/** \ingroup m_process_management - * \brief Return the location on which a process is running. - * \param process a process (nullptr means the current one) - * \return the msg_host_t corresponding to the location on which \a process is running. - */ msg_host_t MSG_process_get_host(msg_process_t process) { if (process == nullptr) { return SIMIX_process_self()->host; } else { - return process->getImpl()->host; + return process->getHost(); } } @@ -326,7 +323,7 @@ int MSG_process_get_number() */ msg_error_t MSG_process_set_kill_time(msg_process_t process, double kill_time) { - simcall_process_set_kill_time(process->getImpl(), kill_time); + process->setKillTime(kill_time); return MSG_OK; } @@ -341,7 +338,7 @@ int MSG_process_get_PID(msg_process_t process) * and the exceptions, so it would be called back again and again */ if (process == nullptr || process->getImpl() == nullptr) return 0; - return process->getImpl()->pid; + return process->getPid(); } /** \ingroup m_process_management @@ -352,7 +349,7 @@ int MSG_process_get_PID(msg_process_t process) */ int MSG_process_get_PPID(msg_process_t process) { - return process->getImpl()->ppid; + return process->getPpid(); } /** \ingroup m_process_management @@ -386,8 +383,7 @@ xbt_dict_t MSG_process_get_properties(msg_process_t process) { xbt_assert(process != nullptr, "Invalid parameter: First argument must not be nullptr"); xbt_dict_t as_dict = xbt_dict_new_homogeneous(xbt_free_f); - std::map* props = - simgrid::simix::kernelImmediate([process] { return process->getImpl()->getProperties(); }); + std::map* props = process->getProperties(); if (props == nullptr) return nullptr; for (auto const& elm : *props) { @@ -443,9 +439,7 @@ msg_process_t MSG_process_self() msg_error_t MSG_process_suspend(msg_process_t process) { xbt_assert(process != nullptr, "Invalid parameter: First argument must not be nullptr"); - - TRACE_msg_process_suspend(process); - simcall_process_suspend(process->getImpl()); + process->suspend(); return MSG_OK; } @@ -457,8 +451,6 @@ msg_error_t MSG_process_suspend(msg_process_t process) msg_error_t MSG_process_resume(msg_process_t process) { xbt_assert(process != nullptr, "Invalid parameter: First argument must not be nullptr"); - - TRACE_msg_process_resume(process); process->resume(); return MSG_OK; } @@ -490,36 +482,38 @@ void MSG_process_on_exit(int_f_pvoid_pvoid_t fun, void *data) { * \brief Sets the "auto-restart" flag of the process. * If the flag is set to 1, the process will be automatically restarted when its host comes back up. */ -XBT_PUBLIC(void) MSG_process_auto_restart_set(msg_process_t process, int auto_restart) { +XBT_PUBLIC void MSG_process_auto_restart_set(msg_process_t process, int auto_restart) +{ process->setAutoRestart(auto_restart); } /** * \ingroup m_process_management * \brief Restarts a process from the beginning. */ -XBT_PUBLIC(msg_process_t) MSG_process_restart(msg_process_t process) { +XBT_PUBLIC msg_process_t MSG_process_restart(msg_process_t process) +{ return process->restart(); } /** @ingroup m_process_management * @brief This process will be terminated automatically when the last non-daemon process finishes */ -XBT_PUBLIC(void) MSG_process_daemonize(msg_process_t process) +XBT_PUBLIC void MSG_process_daemonize(msg_process_t process) { - simgrid::simix::kernelImmediate([process]() { process->getImpl()->daemonize(); }); + process->daemonize(); } /** @ingroup m_process_management * @brief Take an extra reference on that process to prevent it to be garbage-collected */ -XBT_PUBLIC(void) MSG_process_ref(msg_process_t process) +XBT_PUBLIC void MSG_process_ref(msg_process_t process) { intrusive_ptr_add_ref(process); } /** @ingroup m_process_management * @brief Release a reference on that process so that it can get be garbage-collected */ -XBT_PUBLIC(void) MSG_process_unref(msg_process_t process) +XBT_PUBLIC void MSG_process_unref(msg_process_t process) { intrusive_ptr_release(process); }