Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Give a way to C users to not leak activities in activityset
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Tue, 14 Nov 2023 16:16:22 +0000 (17:16 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Tue, 14 Nov 2023 16:16:22 +0000 (17:16 +0100)
examples/c/activityset-testany/activityset-testany.c
examples/c/activityset-waitall/activityset-waitall.c
examples/c/activityset-waitallfor/activityset-waitallfor.c
examples/c/activityset-waitany/activityset-waitany.c
include/simgrid/activity_set.h
src/s4u/s4u_ActivitySet.cpp

index 370e684..b0c8702 100644 (file)
@@ -41,6 +41,7 @@ static void bob(int argc, char* argv[])
         XBT_INFO("Completed a Comm");
       if (sg_exec_isinstance(completed_one))
         XBT_INFO("Completed an Exec");
+      sg_activity_unref(completed_one);
     } else {
       XBT_INFO("Nothing matches, test again in 0.5s");
       sg_actor_sleep_for(.5);
index c63f091..fe9e271 100644 (file)
@@ -32,6 +32,8 @@ static void bob()
 
   XBT_INFO("Wait for asynchronous activities to complete, all in one shot.");
   sg_activity_set_wait_all(pending_activities);
+  sg_activity_unref((sg_activity_t)exec);
+  sg_activity_unref((sg_activity_t)comm);
 
   XBT_INFO("All activities are completed.");
   free(payload);
index 93bbe67..5bc1ede 100644 (file)
@@ -42,6 +42,7 @@ static void bob()
         XBT_INFO("Completed a Comm");
       if (sg_exec_isinstance(completed_one))
         XBT_INFO("Completed an Exec");
+      sg_activity_unref(completed_one);
       completed_one = sg_activity_set_test_any(pending_activities);
     }
   }
index 183693f..3bf9b25 100644 (file)
@@ -40,6 +40,7 @@ static void bob()
       XBT_INFO("Completed an Exec");
     else
       xbt_die("This activity set is supposed to only contain Comm or Exec");
+    sg_activity_unref(completed_one);
   }
   XBT_INFO("Last activity is complete");
   free(payload);
index 9028407..9f80ad7 100644 (file)
@@ -26,6 +26,9 @@ XBT_PUBLIC sg_activity_t sg_activity_set_wait_any(sg_activity_set_t as);
 XBT_PUBLIC sg_activity_t sg_activity_set_wait_any_for(sg_activity_set_t as, double timeout);
 XBT_PUBLIC void sg_activity_set_delete(sg_activity_set_t as);
 
+/** You must call this function manually on activities extracted from an activity_set with waitany and friends */
+XBT_PUBLIC void sg_activity_unref(sg_activity_t acti);
+
 SG_END_DECL
 
 #endif /* INCLUDE_SIMGRID_ACTIVITY_SET_H */
index 215f126..92a65ce 100644 (file)
@@ -182,5 +182,9 @@ void sg_activity_set_delete(sg_activity_set_t as)
 {
   delete as;
 }
+void sg_activity_unref(sg_activity_t acti)
+{
+  acti->unref();
+}
 
 SG_END_DECL