#include "mc/mc.h"
#include "smx_private.hpp"
+#include "src/kernel/activity/CommImpl.hpp"
+#include "src/kernel/activity/ExecImpl.hpp"
#include "src/kernel/activity/IoImpl.hpp"
#include "src/kernel/activity/SleepImpl.hpp"
#include "src/kernel/activity/SynchroRaw.hpp"
#include "src/simix/smx_host_private.hpp"
#include "src/simix/smx_io_private.hpp"
#include "src/simix/smx_synchro_private.hpp"
+#include "src/surf/HostImpl.hpp"
#include "src/surf/cpu_interface.hpp"
#include "xbt/ex.hpp"
XBT_DEBUG("%p should not be run anymore",process);
simix_global->process_list.erase(process->pid_);
if (process->host_ && process->host_process_list_hook.is_linked())
- simgrid::xbt::intrusive_erase(process->host_->extension<simgrid::simix::Host>()->process_list, *process);
+ simgrid::xbt::intrusive_erase(process->host_->pimpl_->process_list_, *process);
if (not process->smx_destroy_list_hook.is_linked()) {
#if SIMGRID_HAVE_MC
xbt_dynar_push_as(simix_global->dead_actors_vector, smx_actor_t, process);
*
* \return the process created
*/
-smx_actor_t SIMIX_process_create(const char* name, simgrid::simix::ActorCode code, void* data, simgrid::s4u::Host* host,
+smx_actor_t SIMIX_process_create(std::string name, simgrid::simix::ActorCode code, void* data, simgrid::s4u::Host* host,
std::unordered_map<std::string, std::string>* properties, smx_actor_t parent_process)
{
- XBT_DEBUG("Start process %s on host '%s'", name, host->get_cname());
+ XBT_DEBUG("Start process %s on host '%s'", name.c_str(), host->get_cname());
if (host->is_off()) {
- XBT_WARN("Cannot launch process '%s' on failed host '%s'", name, host->get_cname());
+ XBT_WARN("Cannot launch process '%s' on failed host '%s'", name.c_str(), host->get_cname());
return nullptr;
}
for (auto const& kv : *properties)
process->set_property(kv.first, kv.second);
- /* Make sure that the process is initialized for simix, in case we are called from the Host::onCreation signal */
- if (host->extension<simgrid::simix::Host>() == nullptr)
- host->extension_set<simgrid::simix::Host>(new simgrid::simix::Host());
-
/* Add the process to its host's process list */
- host->extension<simgrid::simix::Host>()->process_list.push_back(*process);
+ host->pimpl_->process_list_.push_back(*process);
XBT_DEBUG("Start context '%s'", process->get_cname());
process->set_property(kv.first, kv.second);
/* Add the process to it's host process list */
- host->extension<simgrid::simix::Host>()->process_list.push_back(*process);
+ host->pimpl_->process_list_.push_back(*process);
/* Now insert it in the global process list and in the process to run list */
simix_global->process_list[process->pid_] = process;
return;
}
- XBT_DEBUG("Actor '%s'@%s is killing actor '%s'@%s", issuer->get_cname(), issuer->host_->get_cname(),
- process->get_cname(), process->host_->get_cname());
+ XBT_DEBUG("Actor '%s'@%s is killing actor '%s'@%s", issuer->get_cname(),
+ (issuer->host_ == nullptr ? "(null)" : issuer->host_->get_cname()), process->get_cname(),
+ process->host_->get_cname());
process->context_->iwannadie = 1;
process->blocked_ = 0;
if (i != process->waiting_synchro->simcalls_.end())
process->waiting_synchro->simcalls_.remove(&process->simcall);
} else if (sleep != nullptr) {
- SIMIX_process_sleep_destroy(process->waiting_synchro);
-
+ if (sleep->surf_sleep)
+ sleep->surf_sleep->cancel();
+ sleep->post();
} else if (raw != nullptr) {
SIMIX_synchro_stop_waiting(process, &process->simcall);
void SIMIX_process_change_host(smx_actor_t actor, sg_host_t dest)
{
xbt_assert((actor != nullptr), "Invalid parameters");
- simgrid::xbt::intrusive_erase(actor->host_->extension<simgrid::simix::Host>()->process_list, *actor);
+ simgrid::xbt::intrusive_erase(actor->host_->pimpl_->process_list_, *actor);
actor->host_ = dest;
- dest->extension<simgrid::simix::Host>()->process_list.push_back(*actor);
+ dest->pimpl_->process_list_.push_back(*actor);
}
void simcall_HANDLER_process_suspend(smx_simcall_t simcall, smx_actor_t process)
* \param argv second argument passed to \a code
* \param properties the properties of the process
*/
-smx_actor_t simcall_process_create(const char* name, xbt_main_func_t code, void* data, sg_host_t host, int argc,
+smx_actor_t simcall_process_create(std::string name, xbt_main_func_t code, void* data, sg_host_t host, int argc,
char** argv, std::unordered_map<std::string, std::string>* properties)
{
- if (name == nullptr)
- name = "";
auto wrapped_code = simgrid::xbt::wrap_main(code, argc, argv);
for (int i = 0; i != argc; ++i)
xbt_free(argv[i]);
return res;
}
-smx_actor_t simcall_process_create(const char* name, simgrid::simix::ActorCode code, void* data, sg_host_t host,
+smx_actor_t simcall_process_create(std::string name, simgrid::simix::ActorCode code, void* data, sg_host_t host,
std::unordered_map<std::string, std::string>* properties)
{
- if (name == nullptr)
- name = "";
smx_actor_t self = SIMIX_process_self();
return simgrid::simix::simcall([name, code, data, host, properties, self] {
return SIMIX_process_create(name, std::move(code), data, host, properties, self);