Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Better fix for constness of argv in sg_actor_start/create.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 25 Mar 2021 08:56:29 +0000 (09:56 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 25 Mar 2021 09:04:39 +0000 (10:04 +0100)
Define two variants of the functions and allow to write the examples
without cast romving const qualifier.

examples/c/actor-create/actor-create.c
examples/c/actor-migrate/actor-migrate.c
examples/c/cloud-capping/cloud-capping.c
examples/c/cloud-migration/cloud-migration.c
examples/c/cloud-simple/cloud-simple.c
examples/c/exec-waitany/exec-waitany.c
examples/c/synchro-semaphore/synchro-semaphore.c
include/simgrid/actor.h
src/s4u/s4u_Actor.cpp

index 5cdf513..8765e79 100644 (file)
@@ -88,16 +88,16 @@ int main(int argc, char** argv)
    */
   int recv_argc           = 2;
   const char* recv_argv[] = {"receiver", "mb42", NULL};
-  sg_actor_create("receiver", sg_host_by_name("Fafard"), receiver, recv_argc, (char**)recv_argv);
+  sg_actor_create_("receiver", sg_host_by_name("Fafard"), receiver, recv_argc, recv_argv);
 
   int sender1_argc           = 3;
   const char* sender1_argv[] = {"sender", "GaBuZoMeu", "mb42", NULL};
-  sg_actor_create("sender1", sg_host_by_name("Tremblay"), sender, sender1_argc, (char**)sender1_argv);
+  sg_actor_create_("sender1", sg_host_by_name("Tremblay"), sender, sender1_argc, sender1_argv);
 
   int sender2_argc           = 3;
   const char* sender2_argv[] = {"sender", "GloubiBoulga", "mb42", NULL};
   sg_actor_t sender2         = sg_actor_init("sender2", sg_host_by_name("Jupiter"));
-  sg_actor_start(sender2, sender, sender2_argc, (char**)sender2_argv);
+  sg_actor_start_(sender2, sender, sender2_argc, sender2_argv);
 
   /* But starting actors directly is considered as a bad experimental habit, since it ties the code
    * you want to test with the experimental scenario. Starting your actors from an external deployment
index a5358cf..9666126 100644 (file)
@@ -42,7 +42,7 @@ static void monitor(int argc, char* argv[])
 
   int actor_argc           = 3;
   const char* actor_argv[] = {"worker", "Boivin", "Jacquelin", NULL};
-  sg_actor_t actor = sg_actor_create("worker", sg_host_by_name("Fafard"), worker, actor_argc, (char**)actor_argv);
+  sg_actor_t actor         = sg_actor_create_("worker", sg_host_by_name("Fafard"), worker, actor_argc, actor_argv);
 
   sg_actor_sleep_for(5);
 
index 81dc1fd..fd5fd66 100644 (file)
@@ -50,7 +50,7 @@ static void launch_worker(sg_host_t host, const char* pr_name, double computatio
   char* argv3        = bprintf("%f", bound);
   const char* argv[] = {pr_name, argv1, argv2, argv3, NULL};
 
-  sg_actor_create(pr_name, host, worker_main, 4, (char**)argv);
+  sg_actor_create_(pr_name, host, worker_main, 4, argv);
 
   free(argv1);
   free(argv2);
@@ -92,11 +92,11 @@ static void test_dynamic_change()
   sg_vm_start(vm1);
 
   const char* w0_argv[] = {"worker0", "Task0", "-1.0", NULL};
-  sg_actor_create("worker0", (sg_host_t)vm0, worker_busy_loop, 3, (char**)w0_argv);
+  sg_actor_create_("worker0", (sg_host_t)vm0, worker_busy_loop, 3, w0_argv);
 
   char* speed           = bprintf("%f", sg_host_get_speed(pm0));
   const char* w1_argv[] = {"worker1", "Task1", speed, NULL};
-  sg_actor_create("worker1", (sg_host_t)vm1, worker_busy_loop, 3, (char**)w1_argv);
+  sg_actor_create_("worker1", (sg_host_t)vm1, worker_busy_loop, 3, w1_argv);
 
   sg_actor_sleep_for(3000); // let the tasks end
 
index f3e5b82..4e64e4b 100644 (file)
@@ -45,7 +45,7 @@ static void vm_migrate_async(const_sg_vm_t vm, const_sg_host_t dst_pm)
   const char* dst_pm_name = sg_host_get_name(dst_pm);
 
   const char* argv[] = {"mig_work", vm_name, dst_pm_name, NULL};
-  sg_actor_create("mig_wrk", sg_host_self(), migration_worker_main, 3, (char**)argv);
+  sg_actor_create_("mig_wrk", sg_host_self(), migration_worker_main, 3, argv);
 }
 
 static void master_main(int argc, char* argv[])
index 6ed1719..b2c10c0 100644 (file)
@@ -72,10 +72,10 @@ static void launch_communication_worker(sg_host_t tx_host, sg_host_t rx_host)
   char* mbox = bprintf("MBOX:%s-%s", sg_host_get_name(tx_host), sg_host_get_name(rx_host));
 
   const char* tx_argv[] = {"comm_tx", mbox, NULL};
-  sg_actor_create("comm_tx", tx_host, communication_tx_fun, 2, (char**)tx_argv);
+  sg_actor_create_("comm_tx", tx_host, communication_tx_fun, 2, tx_argv);
 
   const char* rx_argv[] = {"comm_rx", mbox, NULL};
-  sg_actor_create("comm_rx", rx_host, communication_rx_fun, 2, (char**)rx_argv);
+  sg_actor_create_("comm_rx", rx_host, communication_rx_fun, 2, rx_argv);
 
   xbt_free(mbox);
 }
index 8b29393..ef353fe 100644 (file)
@@ -67,10 +67,10 @@ int main(int argc, char* argv[])
   simgrid_load_platform(argv[1]);
 
   const char* worker_argv[] = {"worker", "false"};
-  sg_actor_create("worker", sg_host_by_name("Tremblay"), worker, 2, (char**)worker_argv);
+  sg_actor_create_("worker", sg_host_by_name("Tremblay"), worker, 2, worker_argv);
 
   worker_argv[1] = "true";
-  sg_actor_create("worker_timeout", sg_host_by_name("Tremblay"), worker, 2, (char**)worker_argv);
+  sg_actor_create_("worker_timeout", sg_host_by_name("Tremblay"), worker, 2, worker_argv);
 
   simgrid_run();
   return 0;
index f52532c..bb0e3b8 100644 (file)
@@ -56,8 +56,8 @@ int main(int argc, char* argv[])
   const char* aliceTimes[] = {"0", "1", "3", "5", "1", "2", "5", "0"};
   const char* bobTimes[]   = {"0.9", "1", "1", "2", "2", "0", "0", "5"};
 
-  sg_actor_create("Alice", h, peer, 8, (char**)aliceTimes);
-  sg_actor_create("Bob", h, peer, 8, (char**)bobTimes);
+  sg_actor_create_("Alice", h, peer, 8, aliceTimes);
+  sg_actor_create_("Bob", h, peer, 8, bobTimes);
 
   simgrid_run();
   sg_sem_destroy(sem);
index 58f2ec2..af0ef34 100644 (file)
@@ -23,13 +23,22 @@ SG_BEGIN_DECL
 XBT_PUBLIC size_t sg_actor_count();
 XBT_PUBLIC sg_actor_t* sg_actor_list();
 
-XBT_PUBLIC sg_actor_t sg_actor_create(const char* name, sg_host_t host, xbt_main_func_t code, int argc,
-                                      char* const* argv);
+XBT_PUBLIC sg_actor_t sg_actor_create_(const char* name, sg_host_t host, xbt_main_func_t code, int argc,
+                                       const char* const* argv);
+static inline sg_actor_t sg_actor_create(const char* name, sg_host_t host, xbt_main_func_t code, int argc,
+                                         char* const* argv)
+{
+  return sg_actor_create_(name, host, code, argc, (const char* const*)argv);
+}
 XBT_PUBLIC sg_actor_t sg_actor_init(const char* name, sg_host_t host);
 /** Start the previously initialized actor.
  *
  * Note that argv is copied over, so you should free your own copy once the actor is started. */
-XBT_PUBLIC void sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char* const* argv);
+XBT_PUBLIC void sg_actor_start_(sg_actor_t actor, xbt_main_func_t code, int argc, const char* const* argv);
+static inline void sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char* const* argv)
+{
+  sg_actor_start_(actor, code, argc, (const char* const*)argv);
+}
 XBT_PUBLIC void sg_actor_set_stacksize(sg_actor_t actor, unsigned size);
 
 XBT_PUBLIC void sg_actor_exit();
index ba18f77..6c2dbe9 100644 (file)
@@ -492,7 +492,7 @@ sg_actor_t sg_actor_init(const char* name, sg_host_t host)
   return simgrid::s4u::Actor::init(name, host).get();
 }
 
-void sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char* const* argv)
+void sg_actor_start_(sg_actor_t actor, xbt_main_func_t code, int argc, const char* const* argv)
 {
   simgrid::kernel::actor::ActorCode function;
   if (code)
@@ -500,7 +500,7 @@ void sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char* cons
   actor->start(function);
 }
 
-sg_actor_t sg_actor_create(const char* name, sg_host_t host, xbt_main_func_t code, int argc, char* const* argv)
+sg_actor_t sg_actor_create_(const char* name, sg_host_t host, xbt_main_func_t code, int argc, const char* const* argv)
 {
   simgrid::kernel::actor::ActorCode function = simgrid::xbt::wrap_main(code, argc, argv);
   return simgrid::s4u::Actor::init(name, host)->start(function).get();