Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Better fix for the security warning from sonar: hide the char* buffer
[simgrid.git] / src / s4u / s4u_Comm.cpp
index 1c90aad1986514a48f74e3a26ac69826d2bc1a68..cd8ea25a73d152e117ae8fa137ec6a0d5bde38ff 100644 (file)
@@ -219,13 +219,30 @@ Comm* Comm::start()
 
   } else if (src_buff_ != nullptr) { // Sender side
     on_send(*this);
-    pimpl_ = simcall_comm_isend(sender_, mailbox_->get_impl(), remains_, rate_, src_buff_, src_buff_size_, match_fun_,
-                                clean_fun_, copy_data_function_, get_data<void>(), detached_);
+    kernel::actor::CommIsendSimcall observer{sender_,
+                                             mailbox_->get_impl(),
+                                             remains_,
+                                             rate_,
+                                             static_cast<unsigned char*>(src_buff_),
+                                             src_buff_size_,
+                                             match_fun_,
+                                             clean_fun_,
+                                             copy_data_function_,
+                                             get_data<void>(),
+                                             detached_};
+    pimpl_ = kernel::actor::simcall([&observer] { return kernel::activity::CommImpl::isend(&observer); }, &observer);
   } else if (dst_buff_ != nullptr) { // Receiver side
     xbt_assert(not detached_, "Receive cannot be detached");
     on_recv(*this);
-    pimpl_ = simcall_comm_irecv(receiver_, mailbox_->get_impl(), dst_buff_, &dst_buff_size_, match_fun_,
-                                copy_data_function_, get_data<void>(), rate_);
+    kernel::actor::CommIrecvSimcall observer{receiver_,
+                                             mailbox_->get_impl(),
+                                             static_cast<unsigned char*>(dst_buff_),
+                                             &dst_buff_size_,
+                                             match_fun_,
+                                             copy_data_function_,
+                                             get_data<void>(),
+                                             rate_};
+    pimpl_ = kernel::actor::simcall([&observer] { return kernel::activity::CommImpl::irecv(&observer); }, &observer);
   } else {
     xbt_die("Cannot start a communication before specifying whether we are the sender or the receiver");
   }