X-Git-Url: http://git.vrable.net/?p=cumulus.git;a=blobdiff_plain;f=store.cc;h=a77d64af0a144ef197116aab55ac93f3e3be98bb;hp=0b0349355629df3ee7eb0d923018afd9c6ed8758;hb=HEAD;hpb=7efae40a865fce46b74538745b17901785062e5f diff --git a/store.cc b/store.cc index 0b03493..a77d64a 100644 --- a/store.cc +++ b/store.cc @@ -64,7 +64,7 @@ Tarfile::Tarfile(RemoteFile *file, const string &segment) assert(sizeof(struct tar_header) == TAR_BLOCK_SIZE); this->file = file; - this->filter = FileFilter::New(file->get_fd(), filter_program); + this->filter.reset(FileFilter::New(file->get_fd(), filter_program)); } Tarfile::~Tarfile() @@ -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");