From: commit-queue@webkit.org Date: Sun, 10 Feb 2013 03:48:27 +0000 (+0000) Subject: Unreviewed, rolling out r137328. X-Git-Url: https://git.webkit.org/?p=WebKit-https.git;a=commitdiff_plain;h=30cd48aeffb5f76e7dd77f8106492a41b5dd697a 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). Patch by Sheriff Bot 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 --- diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog index 40146ff57869..22dbcc63a3b9 100644 --- a/Source/WebKit2/ChangeLog +++ b/Source/WebKit2/ChangeLog @@ -1,3 +1,19 @@ +2013-02-09 Sheriff Bot + + 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 Fix ASSERT when the Web Content Process crashes diff --git a/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp b/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp index 78ceb85c6471..ae2b1fb822ac 100644 --- a/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp +++ b/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.cpp @@ -39,8 +39,9 @@ PassOwnPtr 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(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(malloc(newCapacity)); - else - m_buffer = static_cast(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(malloc(newCapacity)); + else + m_buffer = static_cast(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) diff --git a/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.h b/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.h index 76938c764bb7..e35f2e5c5e03 100644 --- a/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.h +++ b/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.h @@ -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 m_attachments; - - uint8_t m_inlineBuffer[inlineBufferSize]; }; } // namespace CoreIPC