summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2015-12-27 14:30:19 +0100
committerJulian Andres Klode <jak@debian.org>2015-12-27 16:23:32 +0100
commit1924be129eb7428284dc7aa35972d047c68cf85d (patch)
tree2cb41f4e5f0256ebd054c46b85f82cc4a266dc75
parent88749b5dc18eb5708af20185e4339e76bda6fb72 (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.cc10
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;
}