/* 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. */
/* 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. */
#include "simgrid/s4u/Actor.hpp"
#include "src/simix/popping_private.hpp"
#include "xbt/PropertyHolder.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 */
class XBT_PUBLIC ActorImpl : public xbt::PropertyHolder {
s4u::Host* host_ = nullptr; /* the host on which the actor is running */
static ActorImpl* self();
double get_kill_time() const;
void set_kill_time(double kill_time);
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
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
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 */
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 has_to_auto_restart() const { return auto_restart_; }
void set_auto_restart(bool autorestart) { auto_restart_ = autorestart; }
void set_stacksize(unsigned stacksize) { stacksize_ = stacksize; }
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_;
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_;
std::shared_ptr<std::vector<std::function<void(bool)>>> on_exit =
std::make_shared<std::vector<std::function<void(bool)>>>();
std::function<void()> code_;
std::shared_ptr<std::vector<std::function<void(bool)>>> on_exit =
std::make_shared<std::vector<std::function<void(bool)>>>();
std::function<void()> code_;
ActorImpl* start(const ActorCode& code);
static ActorImplPtr create(const std::string& name, const ActorCode& code, void* data, s4u::Host* host,
ActorImpl* start(const ActorCode& code);
static ActorImplPtr create(const std::string& name, const ActorCode& code, void* data, s4u::Host* host,
- static ActorImplPtr attach(const std::string& name, void* data, s4u::Host* host,
- const std::unordered_map<std::string, std::string>* properties);
+ static ActorImplPtr attach(const std::string& name, void* data, s4u::Host* host);
explicit ProcessArg(const std::string& name, const std::function<void()>& code, void* data, s4u::Host* host,
explicit ProcessArg(const std::string& name, const std::function<void()>& code, void* data, s4u::Host* host,
- double kill_time, std::shared_ptr<std::unordered_map<std::string, std::string>> properties,
+ double kill_time, const std::unordered_map<std::string, std::string>& properties,
explicit ProcessArg(s4u::Host* host, ActorImpl* actor)
: name(actor->get_name())
, code(actor->code_)
explicit ProcessArg(s4u::Host* host, ActorImpl* actor)
: name(actor->get_name())
, code(actor->code_)
, host(host)
, kill_time(actor->get_kill_time())
, auto_restart(actor->has_to_auto_restart())
, daemon_(actor->is_daemon())
, on_exit(actor->on_exit)
{
, host(host)
, kill_time(actor->get_kill_time())
, auto_restart(actor->has_to_auto_restart())
, daemon_(actor->is_daemon())
, on_exit(actor->on_exit)
{
XBT_PUBLIC void create_maestro(const std::function<void()>& code);
XBT_PUBLIC unsigned long get_maxpid();
XBT_PUBLIC void create_maestro(const std::function<void()>& code);
XBT_PUBLIC unsigned long get_maxpid();