Diff
Modified: trunk/Source/WebKit2/ChangeLog (141481 => 141482)
--- trunk/Source/WebKit2/ChangeLog 2013-01-31 21:57:00 UTC (rev 141481)
+++ trunk/Source/WebKit2/ChangeLog 2013-01-31 22:00:22 UTC (rev 141482)
@@ -1,3 +1,25 @@
+2013-01-31 Anders Carlsson <[email protected]>
+
+ Use a Vector for IPC attachments
+ https://bugs.webkit.org/show_bug.cgi?id=108517
+
+ Reviewed by Sam Weinig.
+
+ * Platform/CoreIPC/ArgumentDecoder.cpp:
+ (CoreIPC::ArgumentDecoder::create):
+ (CoreIPC::ArgumentDecoder::ArgumentDecoder):
+ (CoreIPC::ArgumentDecoder::removeAttachment):
+ * Platform/CoreIPC/ArgumentDecoder.h:
+ (ArgumentDecoder):
+ * Platform/CoreIPC/Connection.h:
+ * Platform/CoreIPC/MessageDecoder.cpp:
+ (CoreIPC::MessageDecoder::create):
+ (CoreIPC::MessageDecoder::MessageDecoder):
+ * Platform/CoreIPC/MessageDecoder.h:
+ (MessageDecoder):
+ * Platform/CoreIPC/mac/ConnectionMac.cpp:
+ (CoreIPC::createMessageDecoder):
+
2013-01-31 Joseph Pecoraro <[email protected]>
Disable ENABLE_FULLSCREEN_API on iOS
Modified: trunk/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp (141481 => 141482)
--- trunk/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp 2013-01-31 21:57:00 UTC (rev 141481)
+++ trunk/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp 2013-01-31 22:00:22 UTC (rev 141482)
@@ -33,11 +33,11 @@
PassOwnPtr<ArgumentDecoder> ArgumentDecoder::create(const uint8_t* buffer, size_t bufferSize)
{
- Deque<Attachment> attachments;
+ Vector<Attachment> attachments;
return adoptPtr(new ArgumentDecoder(buffer, bufferSize, attachments));
}
-ArgumentDecoder::ArgumentDecoder(const uint8_t* buffer, size_t bufferSize, Deque<Attachment>& attachments)
+ArgumentDecoder::ArgumentDecoder(const uint8_t* buffer, size_t bufferSize, Vector<Attachment>& attachments)
{
initialize(buffer, bufferSize);
@@ -224,17 +224,9 @@
if (m_attachments.isEmpty())
return false;
- attachment = m_attachments.takeFirst();
+ attachment = m_attachments.last();
+ m_attachments.removeLast();
return true;
}
-#ifndef NDEBUG
-void ArgumentDecoder::debug()
-{
- printf("ArgumentDecoder::debug()\n");
- printf("Number of Attachments: %d\n", (int)m_attachments.size());
- printf("Size of buffer: %d\n", (int)(m_bufferEnd - m_buffer));
-}
-#endif
-
} // namespace CoreIPC
Modified: trunk/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.h (141481 => 141482)
--- trunk/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.h 2013-01-31 21:57:00 UTC (rev 141481)
+++ trunk/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.h 2013-01-31 22:00:22 UTC (rev 141482)
@@ -28,7 +28,6 @@
#include "ArgumentCoder.h"
#include "Attachment.h"
-#include <wtf/Deque.h>
#include <wtf/PassOwnPtr.h>
#include <wtf/TypeTraits.h>
#include <wtf/Vector.h>
@@ -93,12 +92,8 @@
bool removeAttachment(Attachment&);
-#ifndef NDEBUG
- void debug();
-#endif
-
protected:
- ArgumentDecoder(const uint8_t* buffer, size_t bufferSize, Deque<Attachment>&);
+ ArgumentDecoder(const uint8_t* buffer, size_t bufferSize, Vector<Attachment>&);
void initialize(const uint8_t* buffer, size_t bufferSize);
@@ -115,7 +110,7 @@
uint8_t* m_bufferPos;
uint8_t* m_bufferEnd;
- Deque<Attachment> m_attachments;
+ Vector<Attachment> m_attachments;
};
} // namespace CoreIPC
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.h (141481 => 141482)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2013-01-31 21:57:00 UTC (rev 141481)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2013-01-31 22:00:22 UTC (rev 141482)
@@ -33,6 +33,7 @@
#include "MessageEncoder.h"
#include "MessageReceiver.h"
#include "WorkQueue.h"
+#include <wtf/Deque.h>
#include <wtf/PassRefPtr.h>
#include <wtf/OwnPtr.h>
#include <wtf/Threading.h>
Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.cpp (141481 => 141482)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.cpp 2013-01-31 21:57:00 UTC (rev 141481)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.cpp 2013-01-31 22:00:22 UTC (rev 141482)
@@ -35,11 +35,11 @@
PassOwnPtr<MessageDecoder> MessageDecoder::create(const DataReference& buffer)
{
- Deque<Attachment> attachments;
+ Vector<Attachment> attachments;
return adoptPtr(new MessageDecoder(buffer, attachments));
}
-PassOwnPtr<MessageDecoder> MessageDecoder::create(const DataReference& buffer, Deque<Attachment>& attachments)
+PassOwnPtr<MessageDecoder> MessageDecoder::create(const DataReference& buffer, Vector<Attachment>& attachments)
{
return adoptPtr(new MessageDecoder(buffer, attachments));
}
@@ -48,7 +48,7 @@
{
}
-MessageDecoder::MessageDecoder(const DataReference& buffer, Deque<Attachment>& attachments)
+MessageDecoder::MessageDecoder(const DataReference& buffer, Vector<Attachment>& attachments)
: ArgumentDecoder(buffer.data(), buffer.size(), attachments)
{
if (!decode(m_messageFlags))
Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.h (141481 => 141482)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.h 2013-01-31 21:57:00 UTC (rev 141481)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.h 2013-01-31 22:00:22 UTC (rev 141482)
@@ -36,7 +36,7 @@
class MessageDecoder : public ArgumentDecoder {
public:
static PassOwnPtr<MessageDecoder> create(const DataReference& buffer);
- static PassOwnPtr<MessageDecoder> create(const DataReference& buffer, Deque<Attachment>&);
+ static PassOwnPtr<MessageDecoder> create(const DataReference& buffer, Vector<Attachment>&);
virtual ~MessageDecoder();
StringReference messageReceiverName() const { return m_messageReceiverName; }
@@ -46,7 +46,7 @@
bool shouldDispatchMessageWhenWaitingForSyncReply() const;
private:
- MessageDecoder(const DataReference& buffer, Deque<Attachment>&);
+ MessageDecoder(const DataReference& buffer, Vector<Attachment>&);
uint8_t m_messageFlags;
StringReference m_messageReceiverName;
Modified: trunk/Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp (141481 => 141482)
--- trunk/Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp 2013-01-31 21:57:00 UTC (rev 141481)
+++ trunk/Source/WebKit2/Platform/CoreIPC/mac/ConnectionMac.cpp 2013-01-31 22:00:22 UTC (rev 141482)
@@ -299,8 +299,6 @@
mach_msg_size_t numDescriptors = body->msgh_descriptor_count;
ASSERT(numDescriptors);
- // Build attachment list
- Deque<Attachment> attachments;
uint8_t* descriptorData = reinterpret_cast<uint8_t*>(body + 1);
// If the message body was sent out-of-line, don't treat the last descriptor
@@ -308,17 +306,19 @@
if (messageBodyIsOOL)
--numDescriptors;
+ // Build attachment list
+ Vector<Attachment> attachments(numDescriptors);
+
for (mach_msg_size_t i = 0; i < numDescriptors; ++i) {
mach_msg_descriptor_t* descriptor = reinterpret_cast<mach_msg_descriptor_t*>(descriptorData);
switch (descriptor->type.type) {
case MACH_MSG_PORT_DESCRIPTOR:
- attachments.append(Attachment(descriptor->port.name, descriptor->port.disposition));
+ attachments[numDescriptors - i - 1] = Attachment(descriptor->port.name, descriptor->port.disposition);
descriptorData += sizeof(mach_msg_port_descriptor_t);
break;
case MACH_MSG_OOL_DESCRIPTOR:
- attachments.append(Attachment(descriptor->out_of_line.address, descriptor->out_of_line.size,
- descriptor->out_of_line.copy, descriptor->out_of_line.deallocate));
+ attachments[numDescriptors - i - 1] = Attachment(descriptor->out_of_line.address, descriptor->out_of_line.size, descriptor->out_of_line.copy, descriptor->out_of_line.deallocate);
descriptorData += sizeof(mach_msg_ool_descriptor_t);
break;
default: