Unreviewed, rolling out r137328.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 10 Feb 2013 03:48:27 +0000 (03:48 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 10 Feb 2013 03:48:27 +0000 (03:48 +0000)
http://trac.webkit.org/changeset/137328
https://bugs.webkit.org/show_bug.cgi?id=109367

causes memory usage to balloon if connection queue is filling
faster than sending (Requested by kling on #webkit).

Patch by Sheriff Bot <webkit.review.bot@gmail.com> on 2013-02-09

* Platform/CoreIPC/ArgumentEncoder.cpp:
(CoreIPC::ArgumentEncoder::ArgumentEncoder):
(CoreIPC::ArgumentEncoder::grow):
* Platform/CoreIPC/ArgumentEncoder.h:
(CoreIPC::ArgumentEncoder::buffer):
(ArgumentEncoder):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@142384 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp
Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.h

index 40146ff578699450d8816bd568aba323594e3eaf..22dbcc63a3b95be1b5ccfd9a5202482512fa1af8 100644 (file)
@@ -1,3 +1,19 @@
+2013-02-09  Sheriff Bot  <webkit.review.bot@gmail.com>
+
+        Unreviewed, rolling out r137328.
+        http://trac.webkit.org/changeset/137328
+        https://bugs.webkit.org/show_bug.cgi?id=109367
+
+        causes memory usage to balloon if connection queue is filling
+        faster than sending (Requested by kling on #webkit).
+
+        * Platform/CoreIPC/ArgumentEncoder.cpp:
+        (CoreIPC::ArgumentEncoder::ArgumentEncoder):
+        (CoreIPC::ArgumentEncoder::grow):
+        * Platform/CoreIPC/ArgumentEncoder.h:
+        (CoreIPC::ArgumentEncoder::buffer):
+        (ArgumentEncoder):
+
 2013-02-08  Sam Weinig  <sam@webkit.org>
 
         Fix ASSERT when the Web Content Process crashes
index 78ceb85c6471a40561b36c65404093747d2d143d..ae2b1fb822ac2fb6f4e57f29a84ac271b9319c15 100644 (file)
@@ -39,8 +39,9 @@ PassOwnPtr<ArgumentEncoder> ArgumentEncoder::create()
 
 ArgumentEncoder::ArgumentEncoder()
     : m_buffer(0)
+    , m_bufferPointer(0)
     , m_bufferSize(0)
-    , m_bufferCapacity(inlineBufferSize)
+    , m_bufferCapacity(0)
 {
 }
 
@@ -67,31 +68,27 @@ uint8_t* ArgumentEncoder::grow(unsigned alignment, size_t size)
     
     if (alignedSize + size > m_bufferCapacity) {
         size_t newCapacity = std::max(alignedSize + size, std::max(static_cast<size_t>(32), m_bufferCapacity + m_bufferCapacity / 4 + 1));
-
-        if (newCapacity > inlineBufferSize) {
-            // Use system malloc / realloc instead of fastMalloc due to
-            // fastMalloc using MADV_FREE_REUSABLE which doesn't work with
-            // mach messages with OOL message and MACH_MSG_VIRTUAL_COPY.
-            // System malloc also calls madvise(MADV_FREE_REUSABLE) but after first
-            // checking via madvise(CAN_REUSE) that it will succeed. Should this
-            // behavior change we'll need to revisit this.
-            if (!m_buffer)
-                m_buffer = static_cast<uint8_t*>(malloc(newCapacity));
-            else
-                m_buffer = static_cast<uint8_t*>(realloc(m_buffer, newCapacity));
-
-            if (!m_buffer)
-                CRASH();
-
-            if (usesInlineBuffer())
-                memcpy(m_buffer, m_inlineBuffer, m_bufferCapacity);
-        }
+        // Use system malloc / realloc instead of fastMalloc due to 
+        // fastMalloc using MADV_FREE_REUSABLE which doesn't work with
+        // mach messages with OOL message and MACH_MSG_VIRTUAL_COPY.
+        // System malloc also calls madvise(MADV_FREE_REUSABLE) but after first
+        // checking via madvise(CAN_REUSE) that it will succeed. Should this
+        // behavior change we'll need to revisit this.
+        if (!m_buffer)
+            m_buffer = static_cast<uint8_t*>(malloc(newCapacity));
+        else
+            m_buffer = static_cast<uint8_t*>(realloc(m_buffer, newCapacity));
+
+        if (!m_buffer)
+            CRASH();
 
         m_bufferCapacity = newCapacity;        
     }
 
     m_bufferSize = alignedSize + size;
-    return buffer() + alignedSize;
+    m_bufferPointer = m_buffer + alignedSize + size;
+    
+    return m_buffer + alignedSize;
 }
 
 void ArgumentEncoder::encodeFixedLengthData(const uint8_t* data, size_t size, unsigned alignment)
index 76938c764bb75e3a27bb49e76be25be33181be8c..e35f2e5c5e032db3cde6353b7e297100c7e894bd 100644 (file)
@@ -73,7 +73,7 @@ public:
         return *this;
     }
 
-    uint8_t* buffer() { return usesInlineBuffer() ? m_inlineBuffer : m_buffer; }
+    uint8_t* buffer() const { return m_buffer; }
     size_t bufferSize() const { return m_bufferSize; }
 
     void addAttachment(const Attachment&);
@@ -83,18 +83,15 @@ protected:
     ArgumentEncoder();
 
 private:
-    static const size_t inlineBufferSize = 4096;
-    bool usesInlineBuffer() const { return m_bufferCapacity <= inlineBufferSize; }
     uint8_t* grow(unsigned alignment, size_t size);
     
     uint8_t* m_buffer;
+    uint8_t* m_bufferPointer;
     
     size_t m_bufferSize;
     size_t m_bufferCapacity;
 
     Vector<Attachment> m_attachments;
-
-    uint8_t m_inlineBuffer[inlineBufferSize];
 };
 
 } // namespace CoreIPC