Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
optimize performances
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Wed, 8 Mar 2017 20:48:38 +0000 (21:48 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Wed, 8 Mar 2017 20:48:38 +0000 (21:48 +0100)
include/simgrid/s4u/host.hpp
src/s4u/s4u_host.cpp
src/simgrid/host.cpp
src/surf/HostImpl.cpp
src/surf/HostImpl.hpp

index 7c48221..77c4a7b 100644 (file)
@@ -94,7 +94,7 @@ public:
   void setPstate(int pstate_index);
   int pstate();
   xbt_dict_t mountedStoragesAsDict(); // HACK
-  std::vector<const char*> attachedStorages();
+  void attachedStorages(std::vector<const char*> * storages);
 
   /** Get an associative list [mount point]->[Storage] of all local mount points.
    *
index dcfa890..44999c9 100644 (file)
@@ -257,11 +257,9 @@ xbt_dict_t Host::mountedStoragesAsDict()
  * \brief Returns the list of storages attached to an host.
  * \return a dict containing all storages attached to the host
  */
-std::vector<const char*> Host::attachedStorages()
+void Host::attachedStorages(std::vector<const char*>* storages)
 {
-  return simgrid::simix::kernelImmediate([this] {
-    return this->pimpl_->getAttachedStorageList();
-  });
+  simgrid::simix::kernelImmediate([this, storages] { this->pimpl_->getAttachedStorageList(storages); });
 }
 
 } // namespace simgrid
index 51bc85e..21f311f 100644 (file)
@@ -121,9 +121,12 @@ xbt_dict_t sg_host_get_mounted_storage_list(sg_host_t host){
 }
 
 xbt_dynar_t sg_host_get_attached_storage_list(sg_host_t host){
+  std::vector<const char*>* storage_vector = new std::vector<const char*>();
   xbt_dynar_t storage_dynar = xbt_dynar_new(sizeof(const char*), nullptr);
-  for (auto name : host->attachedStorages())
+  host->attachedStorages(storage_vector);
+  for (auto name : *storage_vector)
     xbt_dynar_push(storage_dynar, &name);
+  delete storage_vector;
   return storage_dynar;
 }
 
index 5366a5d..edb9499 100644 (file)
@@ -138,23 +138,21 @@ xbt_dict_t HostImpl::getMountedStorageList()
   return storage_list;
 }
 
-std::vector<const char*> HostImpl::getAttachedStorageList()
+void HostImpl::getAttachedStorageList(std::vector<const char*>* storages)
 {
   xbt_lib_cursor_t cursor;
   char* key;
   void** data;
-  std::vector<const char*> result;
   xbt_lib_foreach(storage_lib, cursor, key, data)
   {
     if (xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != nullptr) {
       simgrid::surf::Storage* storage = static_cast<simgrid::surf::Storage*>(
           xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
       if (!strcmp(static_cast<const char*>(storage->attach_), piface_->cname())) {
-        result.push_back(storage->cname());
+        storages->push_back(storage->cname());
       }
     }
   }
-  return result;
 }
 
 Action* HostImpl::open(const char* fullpath)
index 4c28215..6180248 100644 (file)
@@ -73,7 +73,7 @@ public:
   virtual xbt_dict_t getMountedStorageList();
 
   /** @brief Get the xbt_dynar_t of storages attached to the Host */
-  virtual std::vector<const char*> getAttachedStorageList();
+  virtual void getAttachedStorageList(std::vector<const char*>* storages);
 
   /**
    * @brief Open a file