diff --git a/src/borg/archive.py b/src/borg/archive.py index 97c5cffa2..d65f2abfc 100644 --- a/src/borg/archive.py +++ b/src/borg/archive.py @@ -1151,13 +1151,15 @@ class FilesystemObjectProcessors: else: with backup_io('open'): fh = Archive._open_rb(path) - with os.fdopen(fh, 'rb') as fd: - self.process_file_chunks(item, cache, self.stats, self.show_progress, backup_io_iter(self.chunker.chunkify(fd, fh))) - md = self.metadata_collector.stat_attrs(st, path, fd=fh) - if not is_special_file: - # we must not memorize special files, because the contents of e.g. a - # block or char device will change without its mtime/size/inode changing. - cache.memorize_file(path_hash, st, [c.id for c in item.chunks]) + try: + self.process_file_chunks(item, cache, self.stats, self.show_progress, backup_io_iter(self.chunker.chunkify(None, fh))) + md = self.metadata_collector.stat_attrs(st, path, fd=fh) + finally: + os.close(fh) + if not is_special_file: + # we must not memorize special files, because the contents of e.g. a + # block or char device will change without its mtime/size/inode changing. + cache.memorize_file(path_hash, st, [c.id for c in item.chunks]) self.stats.nfiles += 1 if md is None: fh = Archive._open_rb(path)