Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Prefer using "try_emplace" (sonar, c++17).
[simgrid.git] / src / plugins / file_system / s4u_FileSystem.cpp
index 20714da..98acd59 100644 (file)
@@ -104,12 +104,7 @@ File::File(const std::string& fullpath, const_sg_host_t host, void* userdata) :
   });
 }
 
-File::~File()
-{
-  std::vector<int>* desc_table =
-      Host::current()->extension<simgrid::s4u::FileDescriptorHostExt>()->file_descriptor_table.get();
-  kernel::actor::simcall_answered([this, desc_table] { desc_table->push_back(this->desc_id); });
-}
+File::~File() = default;
 
 File* File::open(const std::string& fullpath, void* userdata)
 {
@@ -121,6 +116,14 @@ File* File::open(const std::string& fullpath, const_sg_host_t host, void* userda
   return new File(fullpath, host, userdata);
 }
 
+void File::close()
+{
+  std::vector<int>* desc_table =
+      Host::current()->extension<simgrid::s4u::FileDescriptorHostExt>()->file_descriptor_table.get();
+  kernel::actor::simcall_answered([this, desc_table] { desc_table->push_back(this->desc_id); });
+  delete this;
+}
+
 void File::dump() const
 {
   XBT_INFO("File Descriptor information:\n"
@@ -324,8 +327,9 @@ int File::remote_copy(sg_host_t host, const std::string& fullpath)
   }
 
   /* Create file on remote host, write it and close it */
-  File fd(fullpath, dst_host, nullptr);
-  fd.write(read_size);
+  auto* fd = File::open(fullpath, dst_host, nullptr);
+  fd->write(read_size);
+  fd->close();
   return 0;
 }
 
@@ -382,6 +386,11 @@ std::map<std::string, sg_size_t, std::less<>>* FileSystemDiskExt::parse_content(
   return parse_content;
 }
 
+void FileSystemDiskExt::add_remote_mount(Host* host, const std::string& mount_point)
+{
+  remote_mount_points_.try_emplace(host, mount_point);
+}
+
 void FileSystemDiskExt::decr_used_size(sg_size_t size)
 {
   simgrid::kernel::actor::simcall_answered([this, size] { used_size_ -= size; });
@@ -565,7 +574,7 @@ void sg_file_move(const_sg_file_t fd, const char* fullpath)
 void sg_file_unlink(sg_file_t fd)
 {
   fd->unlink();
-  delete fd;
+  fd->close();
 }
 
 /**