]> git.saurik.com Git - apt.git/commitdiff
Do not buffer writes larger than the buffer if possible
authorJulian Andres Klode <jak@debian.org>
Mon, 1 Feb 2016 15:46:53 +0000 (16:46 +0100)
committerJulian Andres Klode <jak@debian.org>
Mon, 1 Feb 2016 15:50:48 +0000 (16:50 +0100)
It makes no sense to split a large block into multiple small
blocks, so when we have the chance to write them unbuffered,
do so.

apt-pkg/contrib/fileutl.cc

index d95748aa6f6a0bb1c362663fac3b24d6e180ae08..8c50874dce782cca4033730e3af5649e5ff605b9 100644 (file)
@@ -1260,6 +1260,12 @@ public:
    }
    virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) override
    {
    }
    virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) override
    {
+      // Optimisation: If the buffer is empty and we have more to write than
+      // would fit in the buffer (or equal number of bytes), write directly.
+      if (writebuffer.empty() == true && Size >= writebuffer.free())
+        return wrapped->InternalWrite(From, Size);
+
+      // Write as much into the buffer as possible and then flush if needed
       auto written = writebuffer.write(From, Size);
 
       if (writebuffer.full() && InternalFlush() == false)
       auto written = writebuffer.write(From, Size);
 
       if (writebuffer.full() && InternalFlush() == false)