Title: [88862] branches/safari-534-branch/Source/WebKit2
Diff
Modified: branches/safari-534-branch/Source/WebKit2/ChangeLog (88861 => 88862)
--- branches/safari-534-branch/Source/WebKit2/ChangeLog 2011-06-14 23:00:45 UTC (rev 88861)
+++ branches/safari-534-branch/Source/WebKit2/ChangeLog 2011-06-14 23:02:11 UTC (rev 88862)
@@ -1,5 +1,28 @@
2011-06-14 Lucas Forschler <[email protected]>
+ Merged 88588.
+
+ 2011-06-10 Anders Carlsson <[email protected]>
+
+ Reviewed by Sam Weinig.
+
+ REGRESSION (WebKit2): window.showModalDialog() broken
+ https://bugs.webkit.org/show_bug.cgi?id=62496
+ <rdar://problem/9581492>
+
+ If dispatching a message ends up creating a nested run loop, some incoming messages can end up not being
+ delivered until we exit from the run loop.
+
+ Fix this by using a Deque instead of a Vector for incoming messages, and get one message at a time and then
+ dispatch it. That prevents us from having any lingering messages lying around in stack allocated space.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::waitForMessage):
+ (CoreIPC::Connection::dispatchMessages):
+ * Platform/CoreIPC/Connection.h:
+
+2011-06-14 Lucas Forschler <[email protected]>
+
Merged 88585.
2011-06-10 Sam Weinig <[email protected]>
Modified: branches/safari-534-branch/Source/WebKit2/Platform/CoreIPC/Connection.cpp (88861 => 88862)
--- branches/safari-534-branch/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2011-06-14 23:00:45 UTC (rev 88861)
+++ branches/safari-534-branch/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2011-06-14 23:02:11 UTC (rev 88862)
@@ -327,14 +327,13 @@
{
MutexLocker locker(m_incomingMessagesLock);
- for (size_t i = 0; i < m_incomingMessages.size(); ++i) {
- IncomingMessage& message = m_incomingMessages[i];
+ for (Deque<IncomingMessage>::iterator it = m_incomingMessages.begin(), end = m_incomingMessages.end(); it != end; ++it) {
+ IncomingMessage& message = *it;
if (message.messageID() == messageID && message.arguments()->destinationID() == destinationID) {
OwnPtr<ArgumentDecoder> arguments = message.releaseArguments();
- // Erase the incoming message.
- m_incomingMessages.remove(i);
+ m_incomingMessages.remove(it);
return arguments.release();
}
}
@@ -701,15 +700,19 @@
void Connection::dispatchMessages()
{
- Vector<IncomingMessage> incomingMessages;
-
- {
- MutexLocker locker(m_incomingMessagesLock);
- m_incomingMessages.swap(incomingMessages);
+ while (true) {
+ IncomingMessage incomingMessage;
+
+ {
+ MutexLocker locker(m_incomingMessagesLock);
+ if (m_incomingMessages.isEmpty())
+ break;
+
+ incomingMessage = m_incomingMessages.takeFirst();
+ }
+
+ dispatchMessage(incomingMessage);
}
-
- for (size_t i = 0; i < incomingMessages.size(); ++i)
- dispatchMessage(incomingMessages[i]);
}
} // namespace CoreIPC
Modified: branches/safari-534-branch/Source/WebKit2/Platform/CoreIPC/Connection.h (88861 => 88862)
--- branches/safari-534-branch/Source/WebKit2/Platform/CoreIPC/Connection.h 2011-06-14 23:00:45 UTC (rev 88861)
+++ branches/safari-534-branch/Source/WebKit2/Platform/CoreIPC/Connection.h 2011-06-14 23:02:11 UTC (rev 88862)
@@ -263,7 +263,7 @@
// Incoming messages.
Mutex m_incomingMessagesLock;
- Vector<IncomingMessage> m_incomingMessages;
+ Deque<IncomingMessage> m_incomingMessages;
// Outgoing messages.
Mutex m_outgoingMessagesLock;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes