Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use a C++ string instead of char* for mailbox name.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sat, 14 Oct 2017 21:24:33 +0000 (23:24 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sat, 14 Oct 2017 21:48:41 +0000 (23:48 +0200)
src/kernel/activity/MailboxImpl.cpp
src/kernel/activity/MailboxImpl.hpp
src/mc/checker/CommunicationDeterminismChecker.cpp
src/s4u/s4u_mailbox.cpp

index 13e9870..d2f1811 100644 (file)
@@ -73,14 +73,14 @@ void MailboxImpl::remove(smx_activity_t activity)
       boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(activity);
 
   xbt_assert(comm->mbox == this, "Comm %p is in mailbox %s, not mailbox %s", comm.get(),
-             (comm->mbox ? comm->mbox->name_ : "(null)"), this->name_);
+             (comm->mbox ? comm->mbox->name_.c_str() : "(null)"), this->name_.c_str());
   comm->mbox = nullptr;
   for (auto it = this->comm_queue.begin(); it != this->comm_queue.end(); it++)
     if (*it == comm) {
       this->comm_queue.erase(it);
       return;
     }
-  xbt_die("Comm %p not found in mailbox %s", comm.get(), this->name_);
+  xbt_die("Comm %p not found in mailbox %s", comm.get(), this->name_.c_str());
 }
 }
 }
index 8c4541d..6c9ee32 100644 (file)
@@ -7,6 +7,7 @@
 #define SIMIX_MAILBOXIMPL_H
 
 #include <boost/circular_buffer.hpp>
+#include <xbt/string.hpp>
 
 #include "simgrid/s4u/Mailbox.hpp"
 #include "src/kernel/activity/CommImpl.hpp"
@@ -21,20 +22,18 @@ namespace activity {
 
 class MailboxImpl {
   explicit MailboxImpl(const char* name)
-      : piface_(this), name_(xbt_strdup(name)), comm_queue(MAX_MAILBOX_SIZE), done_comm_queue(MAX_MAILBOX_SIZE)
+      : piface_(this), name_(name), comm_queue(MAX_MAILBOX_SIZE), done_comm_queue(MAX_MAILBOX_SIZE)
   {
   }
 
 public:
-  ~MailboxImpl() { xbt_free(name_); }
-
   static MailboxImpl* byNameOrNull(const char* name);
   static MailboxImpl* byNameOrCreate(const char* name);
   void setReceiver(s4u::ActorPtr actor);
   void push(activity::CommImplPtr comm);
   void remove(smx_activity_t activity);
   simgrid::s4u::Mailbox piface_; // Our interface
-  char* name_;
+  simgrid::xbt::string name_;
 
   simgrid::simix::ActorImplPtr permanent_receiver; // process which the mailbox is attached to
   boost::circular_buffer_space_optimized<smx_activity_t> comm_queue;
index 6c50eb7..7fb06e5 100644 (file)
@@ -236,7 +236,9 @@ void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_sim
     simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer();
 
     char* remote_name;
-    mc_model_checker->process().read(&remote_name, remote(comm->mbox ? &comm->mbox->name_ : &comm->mbox_cpy->name_));
+    mc_model_checker->process().read(
+        &remote_name, remote(comm->mbox ? &simgrid::xbt::string::to_string_data(comm->mbox->name_).data
+                                        : &simgrid::xbt::string::to_string_data(comm->mbox_cpy->name_).data));
     pattern->rdv = mc_model_checker->process().read_string(remote_name);
     pattern->dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc))->pid;
     pattern->dst_host = MC_smx_actor_get_host_name(issuer);
index 5a594bc..a3dbf16 100644 (file)
@@ -18,7 +18,7 @@ namespace s4u {
 
 const char* Mailbox::getName()
 {
-  return pimpl_->name_;
+  return pimpl_->name_.c_str();
 }
 
 MailboxPtr Mailbox::byName(const char*name)