namespace actor {
/*------------------------- [ ActorIDTrait ] -------------------------*/
-static unsigned long maxpid = 0;
-unsigned long get_maxpid()
-{
- return maxpid;
-}
-unsigned long* get_maxpid_addr()
-{
- return &maxpid;
-}
-ActorIDTrait::ActorIDTrait(const std::string& name, aid_t ppid) : name_(name), pid_(maxpid++), ppid_(ppid) {}
+unsigned long ActorIDTrait::maxpid_ = 0;
+
+ActorIDTrait::ActorIDTrait(const std::string& name, aid_t ppid) : name_(name), pid_(maxpid_++), ppid_(ppid) {}
ActorImpl* ActorImpl::self()
{
aid_t pid_ = 0;
aid_t ppid_ = -1;
+ static unsigned long maxpid_;
+
public:
explicit ActorIDTrait(const std::string& name, aid_t ppid);
const xbt::string& get_name() const { return name_; }
const char* get_cname() const { return name_.c_str(); }
aid_t get_pid() const { return pid_; }
aid_t get_ppid() const { return ppid_; }
+
+ static unsigned long get_maxpid() { return maxpid_; }
+ // In MC mode, the application sends this pointer to the MC
+ static unsigned long* get_maxpid_addr() { return &maxpid_; }
};
-XBT_PUBLIC unsigned long get_maxpid();
-XBT_PUBLIC unsigned long* get_maxpid_addr(); // In MC mode, the application sends this pointers to the MC
/*------------------------- [ ActorRestartingTrait ] -------------------------*/
class XBT_PUBLIC ActorRestartingTrait {
void simgrid::mc::RecordTrace::replay(const std::string& path_string)
{
- simgrid::mc::processes_time.resize(simgrid::kernel::actor::get_maxpid());
+ simgrid::mc::processes_time.resize(kernel::actor::ActorIDTrait::get_maxpid());
simgrid::mc::RecordTrace trace(path_string.c_str());
trace.replay();
for (auto* item : trace.transitions_)
strerror(errno));
s_mc_message_initial_addresses_t message{MessageType::INITIAL_ADDRESSES, mmalloc_preinit(),
- kernel::actor::get_maxpid_addr(), actors_addr};
+ kernel::actor::ActorIDTrait::get_maxpid_addr(), actors_addr};
xbt_assert(instance_->channel_.send(message) == 0, "Could not send the initial message with addresses.");
instance_->handle_messages();
void AppSide::main_loop() const
{
- simgrid::mc::processes_time.resize(simgrid::kernel::actor::get_maxpid());
+ simgrid::mc::processes_time.resize(simgrid::kernel::actor::ActorIDTrait::get_maxpid());
MC_ignore_heap(simgrid::mc::processes_time.data(),
simgrid::mc::processes_time.size() * sizeof(simgrid::mc::processes_time[0]));