Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
implement Activity::destroy when you want to clean up things
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Wed, 29 Dec 2021 17:15:07 +0000 (18:15 +0100)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Sun, 2 Jan 2022 13:15:22 +0000 (14:15 +0100)
include/simgrid/s4u/Activity.hpp
src/s4u/s4u_Activity.cpp
src/simdag/sd_dotloader.cpp

index 6b4ceae..653533b 100644 (file)
@@ -48,6 +48,7 @@ public:
 protected:
   Activity()  = default;
   virtual ~Activity() = default;
+  void destroy();
 
   void release_dependencies()
   {
index ace662e..e06fb23 100644 (file)
@@ -25,6 +25,17 @@ xbt::signal<void(Activity&)> Activity::on_completion;
 
 std::set<Activity*>* Activity::vetoed_activities_ = nullptr;
 
+void Activity::destroy()
+{
+  /* First Remove all dependencies */
+  while (not dependencies_.empty())
+    (*(dependencies_.begin()))->remove_successor(this);
+  while (not successors_.empty())
+    this->remove_successor(successors_.front());
+
+  cancel();
+}
+
 void Activity::wait_until(double time_limit)
 {
   double now = Engine::get_clock();
@@ -79,7 +90,6 @@ Activity* Activity::cancel()
     if (pimpl_)
       pimpl_->cancel();
   });
-  release_dependencies();
   complete(State::CANCELED);
   return this;
 }
index c7494d0..90609a3 100644 (file)
@@ -123,7 +123,7 @@ std::vector<ActivityPtr> create_DAG_from_dot(const std::string& filename)
     std::string base = simgrid::xbt::Path(filename).get_base_name();
     XBT_ERROR("The DOT described in %s is not a DAG. It contains a cycle.", base.c_str());
     for (const auto& a : dag)
-      a->cancel();
+      a->destroy();
     dag.clear();
   }