]> git.lizzy.rs Git - rust.git/commitdiff
Make sure all input archives are unmapped before persisting the output archive
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>
Sat, 3 Dec 2022 12:53:47 +0000 (12:53 +0000)
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>
Sat, 3 Dec 2022 12:53:47 +0000 (12:53 +0000)
compiler/rustc_codegen_ssa/src/back/archive.rs

index 8274caa42bcfc65d8c4dd4f3dee2bf0adb5ec961..58558fb8c4ba2912b53f7fcef66c10c676c4a7aa 100644 (file)
@@ -290,11 +290,17 @@ fn build_inner(self, output: &Path) -> io::Result<bool> {
             false,
         )?;
 
+        let any_entries = !entries.is_empty();
+        drop(entries);
+        // Drop src_archives to unmap all input archives, which is necessary if we want to write the
+        // output archive to the same location as an input archive on Windows.
+        drop(self.src_archives);
+
         archive_tmpfile
             .persist(output)
             .map_err(|err| io_error_context("failed to rename archive file", err.error))?;
 
-        Ok(!entries.is_empty())
+        Ok(any_entries)
     }
 }