-/* Copyright (c) 2007-2021. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2007-2022. 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. */
#ifndef SIMGRID_KERNEL_ACTOR_ACTORIMPL_HPP
#define SIMGRID_KERNEL_ACTOR_ACTORIMPL_HPP
+#include "simgrid/kernel/Timer.hpp"
#include "simgrid/s4u/Actor.hpp"
#include "src/simix/popping_private.hpp"
#include "xbt/PropertyHolder.hpp"
class XBT_PUBLIC ActorImpl : public xbt::PropertyHolder {
s4u::Host* host_ = nullptr; /* the host on which the actor is running */
- void* userdata_ = nullptr; /* XBT_ATTRIB_DEPRECATED_v329 kept for compatibility, should be replaced with moddata */
aid_t pid_ = 0;
aid_t ppid_ = -1;
bool daemon_ = false; /* Daemon actors are automatically killed when the last non-daemon leaves */
static ActorImpl* self();
double get_kill_time() const;
void set_kill_time(double kill_time);
- boost::intrusive::list_member_hook<> host_actor_list_hook; /* simgrid::simix::Host::process_list */
- boost::intrusive::list_member_hook<> smx_destroy_list_hook; /* simix_global->actors_to_destroy */
+ boost::intrusive::list_member_hook<> host_actor_list_hook; /* resource::HostImpl::actor_list_ */
+ boost::intrusive::list_member_hook<> kernel_destroy_list_hook; /* EngineImpl actors_to_destroy */
boost::intrusive::list_member_hook<> smx_synchro_hook; /* {mutex,cond,sem}->sleeping */
const xbt::string& get_name() const { return name_; }
const char* get_cname() const { return name_.c_str(); }
// Accessors to private fields
- s4u::Host* get_host() { return host_; }
+ s4u::Host* get_host() const { return host_; }
void set_host(s4u::Host* dest);
- void* get_user_data() { return userdata_; } // XBT_ATTRIB_DEPRECATED_v329
- void set_user_data(void* data) { userdata_ = data; } // XBT_ATTRIB_DEPRECATED_v329
aid_t get_pid() const { return pid_; }
aid_t get_ppid() const { return ppid_; }
void set_ppid(aid_t ppid) { ppid_ = ppid; }
bool is_daemon() const { return daemon_; } /** Whether this actor has been daemonized */
+ bool is_maestro() const; /** Whether this actor is actually maestro (cheap call but may segfault before actor creation
+ / after terminaison) */
bool has_to_auto_restart() const { return auto_restart_; }
void set_auto_restart(bool autorestart) { auto_restart_ = autorestart; }
void set_stacksize(unsigned stacksize) { stacksize_ = stacksize; }
activity::ActivityImplPtr waiting_synchro_ = nullptr; /* the current blocking synchro if any */
std::list<activity::ActivityImplPtr> activities_; /* the current non-blocking synchros */
s_smx_simcall simcall_;
- /* list of functions executed when the process dies */
+ /* list of functions executed when the actor dies */
std::shared_ptr<std::vector<std::function<void(bool)>>> on_exit =
std::make_shared<std::vector<std::function<void(bool)>>>();
std::function<void()> code_;
- simix::Timer* kill_timer_ = nullptr;
+ timer::Timer* kill_timer_ = nullptr;
private:
/* Refcounting */
void* data = nullptr;
s4u::Host* host = nullptr;
double kill_time = 0.0;
- const std::unordered_map<std::string, std::string> properties;
+ const std::unordered_map<std::string, std::string> properties{};
bool auto_restart = false;
bool daemon_ = false;
- /* list of functions executed when the process dies */
+ /* list of functions executed when the actor dies */
const std::shared_ptr<std::vector<std::function<void(bool)>>> on_exit;
ProcessArg() = delete;
explicit ProcessArg(s4u::Host* host, ActorImpl* actor)
: name(actor->get_name())
, code(actor->code_)
- , data(actor->get_user_data())
+ , data(actor->get_ciface()->get_data<void>())
, host(host)
, kill_time(actor->get_kill_time())
, auto_restart(actor->has_to_auto_restart())
} // namespace kernel
} // namespace simgrid
-extern void (*SMPI_switch_data_segment)(simgrid::s4u::ActorPtr actor);
-
#endif