Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
stick to our coding standards: fields must have a trailing _
[simgrid.git] / src / kernel / actor / ActorImpl.hpp
index 831fb73..276eb21 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2019. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2007-2020. 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. */
@@ -8,7 +8,7 @@
 
 #include "simgrid/s4u/Actor.hpp"
 #include "src/simix/popping_private.hpp"
-#include "src/surf/PropertyHolder.hpp"
+#include "xbt/PropertyHolder.hpp"
 #include <boost/intrusive/list.hpp>
 #include <functional>
 #include <list>
@@ -19,7 +19,7 @@ namespace simgrid {
 namespace kernel {
 namespace actor {
 
-class XBT_PUBLIC ActorImpl : public surf::PropertyHolder {
+class XBT_PUBLIC ActorImpl : public xbt::PropertyHolder {
   s4u::Host* host_   = nullptr; /* the host on which the actor is running */
   // XBT_DEPRECATED_v329
   void* userdata_    = nullptr; /* kept for compatibility, it should be replaced with moddata */
@@ -27,6 +27,7 @@ class XBT_PUBLIC ActorImpl : public surf::PropertyHolder {
   aid_t ppid_        = -1;
   bool daemon_       = false; /* Daemon actors are automatically killed when the last non-daemon leaves */
   bool auto_restart_ = false;
+  unsigned stacksize_; // set to default value in constructor
 
 public:
   xbt::string name_;
@@ -58,6 +59,8 @@ public:
   bool is_daemon() { return daemon_; } /** Whether this actor has been daemonized */
   bool has_to_auto_restart() { return auto_restart_; }
   void set_auto_restart(bool autorestart) { auto_restart_ = autorestart; }
+  void set_stacksize(unsigned stacksize) { stacksize_ = stacksize; }
+  unsigned get_stacksize() { return stacksize_; }
 
   std::unique_ptr<context::Context> context_; /* the context (uctx/raw/thread) that executes the user function */
 
@@ -65,15 +68,15 @@ public:
   bool finished_  = false;
   bool suspended_ = false;
 
-  activity::ActivityImplPtr waiting_synchro = nullptr; /* the current blocking synchro if any */
-  std::list<activity::ActivityImplPtr> comms;          /* the current non-blocking communication 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_;
   /* list of functions executed when the process 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;
+  simix::Timer* kill_timer_ = nullptr;
 
 private:
   /* Refcounting */
@@ -107,6 +110,7 @@ public:
 private:
   s4u::Actor piface_; // Our interface is part of ourselves
 
+  void cleanup_from_simix();
   void undaemonize();
 
 public:
@@ -114,9 +118,9 @@ public:
   s4u::Actor* ciface() { return &piface_; }
 
   ActorImplPtr init(const std::string& name, s4u::Host* host);
-  ActorImpl* start(const simix::ActorCode& code);
+  ActorImpl* start(const ActorCode& code);
 
-  static ActorImplPtr create(const std::string& name, const simix::ActorCode& code, void* data, s4u::Host* host,
+  static ActorImplPtr create(const std::string& name, const ActorCode& code, void* data, s4u::Host* host,
                              const std::unordered_map<std::string, std::string>* properties, ActorImpl* parent_actor);
   static ActorImplPtr attach(const std::string& name, void* data, s4u::Host* host,
                              const std::unordered_map<std::string, std::string>* properties);
@@ -132,7 +136,7 @@ public:
   s4u::Actor* restart();
   void suspend();
   void resume();
-  activity::ActivityImplPtr join(ActorImpl* actor, double timeout);
+  activity::ActivityImplPtr join(const ActorImpl* actor, double timeout);
   activity::ActivityImplPtr sleep(double duration);
   /** Ask the actor to throw an exception right away */
   void throw_exception(std::exception_ptr e);
@@ -199,4 +203,8 @@ XBT_PUBLIC int get_maxpid();
 
 extern void (*SMPI_switch_data_segment)(simgrid::s4u::ActorPtr actor);
 
+XBT_PUBLIC smx_actor_t simcall_process_create(const std::string& name, const simgrid::kernel::actor::ActorCode& code,
+                                              void* data, sg_host_t host,
+                                              std::unordered_map<std::string, std::string>* properties);
+
 #endif