Title: [89771] trunk/Source/WebKit2
- Revision
- 89771
- Author
- [email protected]
- Date
- 2011-06-26 10:17:55 -0700 (Sun, 26 Jun 2011)
Log Message
2011-06-26 Anders Carlsson <[email protected]>
Reviewed by Dan Bernstein.
Don't use a Mutex for protecting access to the connection queue clients
https://bugs.webkit.org/show_bug.cgi?id=63403
Make sure to only access the queue client vector from the connection work queue.
This gets rid of a lock and ensures that adding/removing clients from callbacks works correctly.
* Platform/CoreIPC/Connection.cpp:
(CoreIPC::Connection::addQueueClient):
(CoreIPC::Connection::removeQueueClient):
(CoreIPC::Connection::addQueueClientOnWorkQueue):
(CoreIPC::Connection::removeQueueClientOnWorkQueue):
(CoreIPC::Connection::processIncomingMessage):
* Platform/CoreIPC/Connection.h:
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (89770 => 89771)
--- trunk/Source/WebKit2/ChangeLog 2011-06-26 17:04:34 UTC (rev 89770)
+++ trunk/Source/WebKit2/ChangeLog 2011-06-26 17:17:55 UTC (rev 89771)
@@ -1,3 +1,21 @@
+2011-06-26 Anders Carlsson <[email protected]>
+
+ Reviewed by Dan Bernstein.
+
+ Don't use a Mutex for protecting access to the connection queue clients
+ https://bugs.webkit.org/show_bug.cgi?id=63403
+
+ Make sure to only access the queue client vector from the connection work queue.
+ This gets rid of a lock and ensures that adding/removing clients from callbacks works correctly.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::addQueueClient):
+ (CoreIPC::Connection::removeQueueClient):
+ (CoreIPC::Connection::addQueueClientOnWorkQueue):
+ (CoreIPC::Connection::removeQueueClientOnWorkQueue):
+ (CoreIPC::Connection::processIncomingMessage):
+ * Platform/CoreIPC/Connection.h:
+
2011-06-25 Brent Fulgham <[email protected]>
Unreviewed build correction after r89426.
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp (89770 => 89771)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2011-06-26 17:04:34 UTC (rev 89770)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2011-06-26 17:17:55 UTC (rev 89771)
@@ -236,17 +236,23 @@
void Connection::addQueueClient(QueueClient* queueClient)
{
- MutexLocker locker(m_connectionQueueClientsMutex);
+ m_connectionQueue.scheduleWork(WorkItem::create(this, &Connection::addQueueClientOnWorkQueue, queueClient));
+}
+
+void Connection::removeQueueClient(QueueClient* queueClient)
+{
+ m_connectionQueue.scheduleWork(WorkItem::create(this, &Connection::removeQueueClientOnWorkQueue, queueClient));
+}
+
+void Connection::addQueueClientOnWorkQueue(QueueClient* queueClient)
+{
ASSERT(!m_connectionQueueClients.contains(queueClient));
-
m_connectionQueueClients.append(queueClient);
}
-void Connection::removeQueueClient(QueueClient* queueClient)
+void Connection::removeQueueClientOnWorkQueue(QueueClient* queueClient)
{
- MutexLocker locker(m_connectionQueueClientsMutex);
size_t index = m_connectionQueueClients.find(queueClient);
-
ASSERT(index != notFound);
m_connectionQueueClients.remove(index);
}
@@ -531,15 +537,11 @@
}
// Hand off the message to the connection queue clients.
- {
- MutexLocker locker(m_connectionQueueClientsMutex);
-
- for (size_t i = 0; i < m_connectionQueueClients.size(); ++i) {
- if (!m_connectionQueueClients[i]->willProcessMessageOnClientRunLoop(this, incomingMessage.messageID(), incomingMessage.arguments())) {
- // A connection queue client handled the message, our work here is done.
- incomingMessage.releaseArguments();
- return;
- }
+ for (size_t i = 0; i < m_connectionQueueClients.size(); ++i) {
+ if (!m_connectionQueueClients[i]->willProcessMessageOnClientRunLoop(this, incomingMessage.messageID(), incomingMessage.arguments())) {
+ // A connection queue client handled the message, our work here is done.
+ incomingMessage.releaseArguments();
+ return;
}
}
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.h (89770 => 89771)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2011-06-26 17:04:34 UTC (rev 89770)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2011-06-26 17:17:55 UTC (rev 89771)
@@ -216,6 +216,9 @@
void processIncomingMessage(MessageID, PassOwnPtr<ArgumentDecoder>);
void processIncomingSyncReply(PassOwnPtr<ArgumentDecoder>);
+ void addQueueClientOnWorkQueue(QueueClient*);
+ void removeQueueClientOnWorkQueue(QueueClient*);
+
bool canSendOutgoingMessages() const;
bool platformCanSendOutgoingMessages() const;
void sendOutgoingMessages();
@@ -246,7 +249,6 @@
WorkQueue m_connectionQueue;
RunLoop* m_clientRunLoop;
- Mutex m_connectionQueueClientsMutex;
Vector<QueueClient*> m_connectionQueueClients;
unsigned m_inDispatchMessageCount;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes