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

Reply via email to