-/* 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. */
bool auto_restart_ = false;
unsigned stacksize_; // set to default value in constructor
+ std::vector<activity::MailboxImpl*> mailboxes;
+ friend activity::MailboxImpl;
+
public:
xbt::string name_;
ActorImpl(xbt::string name, s4u::Host* host);
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::surf::HostImpl::actor_list_ */
+ 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 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);
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_;
- std::vector<SimcallObserver*> observer_stack_;
/* 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)>>>();
explicit ProcessArg(s4u::Host* host, ActorImpl* actor)
: name(actor->get_name())
, code(actor->code_)
- , data(actor->get_ciface()->get_data())
+ , data(actor->get_ciface()->get_data<void>())
, host(host)
, kill_time(actor->get_kill_time())
, auto_restart(actor->has_to_auto_restart())