Fix output file size estimation.
authorMichael Vrable <vrable@cs.hmc.edu>
Mon, 21 Oct 2013 17:02:17 +0000 (10:02 -0700)
committerMichael Vrable <vrable@cs.hmc.edu>
Sun, 26 Jan 2014 23:45:38 +0000 (15:45 -0800)
When piping output through a filter (for compression/encryption), we need
to keep the underlying file descriptor open so we can check the output file
size.  Previously it was being closed too early so Tarfile::size_estimate
was failing.

store.cc

index 0b03493..ba6d692 100644 (file)
--- a/store.cc
+++ b/store.cc
@@ -96,7 +96,6 @@ FileFilter *FileFilter::New(int fd, const char *program)
 
     pid_t pid;
     int wrapped_fd = spawn_filter(fd, program, &pid);
-    close(fd);
     return new FileFilter(fd, wrapped_fd, pid);
 }
 
@@ -106,6 +105,10 @@ int FileFilter::wait()
     if (pid == -1)
         return 0;
 
+    // The raw file descriptor was held open to track the output file size, but
+    // is not needed any longer.
+    close(fd_raw);
+
     int status;
     if (waitpid(pid, &status, 0) < 0) {
         fprintf(stderr, "Error waiting for filter process: %m\n");