diff options
author | Julian Andres Klode <jak@debian.org> | 2015-12-27 14:30:19 +0100 |
---|---|---|
committer | Julian Andres Klode <jak@debian.org> | 2015-12-27 16:23:32 +0100 |
commit | 1924be129eb7428284dc7aa35972d047c68cf85d (patch) | |
tree | 2cb41f4e5f0256ebd054c46b85f82cc4a266dc75 | |
parent | 88749b5dc18eb5708af20185e4339e76bda6fb72 (diff) |
rred: Use buffered writes
Buffered writes improve performance a lot, given that we spent
about 78% of the time in _write.
-rw-r--r-- | methods/rred.cc | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/methods/rred.cc b/methods/rred.cc index 5a1053019..80f8746c7 100644 --- a/methods/rred.cc +++ b/methods/rred.cc @@ -531,6 +531,7 @@ class Patch { dump_mem(out, ch->add, ch->add_len, hash); } dump_rest(out, in, hash); + out.Flush(); } }; @@ -643,7 +644,7 @@ class RredMethod : public aptMethod { std::cerr << "FAILED to open inp " << Path << std::endl; return _error->Error("Failed to open inp %s", Path.c_str()); } - if (out.Open(Itm->DestFile, FileFd::WriteOnly | FileFd::Create, FileFd::Extension) == false) + if (out.Open(Itm->DestFile, FileFd::WriteOnly | FileFd::Create | FileFd::BufferedWrite, FileFd::Extension) == false) { std::cerr << "FAILED to open out " << Itm->DestFile << std::endl; return _error->Error("Failed to open out %s", Itm->DestFile.c_str()); @@ -729,17 +730,20 @@ int main(int argc, char **argv) FileFd out, inp; std::cerr << "Patching " << argv[2] << " into " << argv[3] << "\n"; inp.Open(argv[2], FileFd::ReadOnly,FileFd::Extension); - out.Open(argv[3], FileFd::WriteOnly | FileFd::Create, FileFd::Extension); + out.Open(argv[3], FileFd::WriteOnly | FileFd::Create | FileFd::BufferedWrite, FileFd::Extension); patch.apply_against_file(out, inp); + out.Close(); } else if (just_diff) { FileFd out; out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create); patch.write_diff(out); + out.Close(); } else { FileFd out, inp; - out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create); + out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create | FileFd::BufferedWrite); inp.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly); patch.apply_against_file(out, inp); + out.Close(); } return 0; } |