- if (longest_prefix_length > 0) { /* Mount point found, split fullpath into mount_name and path+filename*/
- mount_name = std::string(fullpath).substr(0, longest_prefix_length);
- path = std::string(fullpath).substr(longest_prefix_length, strlen(fullpath));
- } else
- xbt_die("Can't find mount point for '%s' on '%s'", fullpath, piface_->cname());
-
- XBT_DEBUG("OPEN %s on disk '%s'", path.c_str(), st->cname());
- Action* action = st->open(mount_name.c_str(), path.c_str());
- return action;
-}
-
-Action* HostImpl::close(surf_file_t fd)
-{
- simgrid::surf::Storage* st = findStorageOnMountList(fd->mount);
- XBT_DEBUG("CLOSE %s on disk '%s'", fd->name, st->cname());
- return st->close(fd);
-}
-
-Action* HostImpl::read(surf_file_t fd, sg_size_t size)
-{
- simgrid::surf::Storage* st = findStorageOnMountList(fd->mount);
- XBT_DEBUG("READ %s on disk '%s'", fd->name, st->cname());
- return st->read(fd, size);
-}
-
-Action* HostImpl::write(surf_file_t fd, sg_size_t size)
-{
- simgrid::surf::Storage* st = findStorageOnMountList(fd->mount);
- XBT_DEBUG("WRITE %s on disk '%s'", fd->name, st->cname());
- return st->write(fd, size);
-}
-
-int HostImpl::unlink(surf_file_t fd)
-{
- if (!fd) {
- XBT_WARN("No such file descriptor. Impossible to unlink");
- return -1;
- } else {
-
- simgrid::surf::Storage* st = findStorageOnMountList(fd->mount);
- /* Check if the file is on this storage */
- if (st->content_->find(fd->name) == st->content_->end()) {
- XBT_WARN("File %s is not on disk %s. Impossible to unlink", fd->name, st->cname());
- return -1;
- } else {
- XBT_DEBUG("UNLINK %s on disk '%s'", fd->name, st->cname());
- st->usedSize_ -= fd->size;
-
- // Remove the file from storage
- sg_size_t* psize = st->content_->at(fd->name);
- delete psize;
- st->content_->erase(fd->name);
-
- xbt_free(fd->name);
- xbt_free(fd->mount);
- xbt_free(fd);
- return 0;
- }
+ // When a host is turned off, we want to keep only the actors that should restart for when it will boot again.
+ // Then get rid of the others.
+ auto elm = actors_at_boot_.begin();
+ while (elm != actors_at_boot_.end()) {
+ if (not elm->second->auto_restart) {
+ delete elm->second;
+ actors_at_boot_.erase(elm);
+ } else
+ ++elm;