Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[sonar] Use unsigned char* for context stacks.
[simgrid.git] / src / simix / ActorImpl.hpp
index 1667712..a0c178d 100644 (file)
@@ -15,7 +15,7 @@
 #include <map>
 
 struct s_smx_process_exit_fun_t {
-  std::function<void(int, void*)> fun;
+  std::function<void(bool, void*)> fun;
   void *arg;
 };
 
@@ -23,7 +23,7 @@ namespace simgrid {
 namespace kernel {
 namespace actor {
 
-class ActorImpl : public surf::PropertyHolder {
+class XBT_PUBLIC ActorImpl : public surf::PropertyHolder {
   s4u::Host* host_   = nullptr; /* the host on which the actor is running */
   void* userdata_    = nullptr; /* kept for compatibility, it should be replaced with moddata */
   aid_t pid_         = 0;
@@ -34,6 +34,8 @@ class ActorImpl : public surf::PropertyHolder {
 public:
   xbt::string name_;
   ActorImpl(xbt::string name, s4u::Host* host);
+  ActorImpl(const ActorImpl&) = delete;
+  ActorImpl& operator=(const ActorImpl&) = delete;
   ~ActorImpl();
 
   double get_kill_time();
@@ -70,7 +72,7 @@ public:
   std::vector<s_smx_process_exit_fun_t> on_exit; /* list of functions executed when the process dies */
 
   std::function<void()> code;
-  smx_timer_t kill_timer = nullptr;
+  simix::Timer* kill_timer = nullptr;
 
 private:
   /* Refcounting */
@@ -105,6 +107,10 @@ public:
 
   static ActorImplPtr create(std::string name, simix::ActorCode code, void* data, s4u::Host* host,
                              std::unordered_map<std::string, std::string>* properties, ActorImpl* parent_actor);
+  static ActorImplPtr attach(std::string name, void* data, s4u::Host* host,
+                             std::unordered_map<std::string, std::string>* properties);
+  static void detach();
+  void cleanup();
   void exit();
   void kill(ActorImpl* actor);
   void kill_all();
@@ -168,8 +174,6 @@ XBT_PUBLIC void create_maestro(std::function<void()> code);
 } // namespace kernel
 } // namespace simgrid
 
-XBT_PRIVATE void SIMIX_process_cleanup(smx_actor_t arg);
-
 extern void (*SMPI_switch_data_segment)(simgrid::s4u::ActorPtr actor);
 
 XBT_PRIVATE void SIMIX_process_sleep_destroy(smx_activity_t synchro);