Title: [273878] trunk/Source/WebKit
Revision
273878
Author
commit-qu...@webkit.org
Date
2021-03-04 01:09:40 -0800 (Thu, 04 Mar 2021)

Log Message

IPC stream feature should use client/server naming instead of sender/receiver
https://bugs.webkit.org/show_bug.cgi?id=222592

Patch by Kimmo Kinnunen <kkinnu...@apple.com> on 2021-03-04
Reviewed by Antti Koivisto.

Attempt to simplify already complicated implementation of the stream
implementation. Uses of "sender" and "receiver" were a leftover from
early phase of the implementation.

Rename all remaining instances of "sender" with "client".
Rename all remaining instances of "receiver" with "server".

No new tests, a refactor.

* Platform/IPC/StreamClientConnection.cpp:
(IPC::StreamClientConnection::StreamClientConnection):
(IPC::StreamClientConnection::setWakeUpSemaphore):
(IPC::StreamClientConnection::wakeUpServer):
* Platform/IPC/StreamClientConnection.h:
(IPC::StreamClientConnection::send):
(IPC::StreamClientConnection::trySendDestinationIDIfNeeded):
(IPC::StreamClientConnection::tryAcquire):
(IPC::StreamClientConnection::release):
* Platform/IPC/StreamConnectionBuffer.cpp:
(IPC::StreamConnectionBuffer::StreamConnectionBuffer):
(IPC::StreamConnectionBuffer::operator=):
(IPC::StreamConnectionBuffer::encode const):
* Platform/IPC/StreamConnectionBuffer.h:
(IPC::StreamConnectionBuffer::clientOffset):
(IPC::StreamConnectionBuffer::serverOffset):
(IPC::StreamConnectionBuffer::clientWaitSemaphore):
(IPC::StreamConnectionBuffer::maximumSize):
* Platform/IPC/StreamServerConnection.cpp:
(IPC::StreamServerConnectionBase::tryAquire):
(IPC::StreamServerConnectionBase::release):
* Platform/IPC/StreamServerConnection.h:
(IPC::StreamServerConnectionBase::sharedClientOffset):
(IPC::StreamServerConnectionBase::sharedServerOffset):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (273877 => 273878)


--- trunk/Source/WebKit/ChangeLog	2021-03-04 09:00:18 UTC (rev 273877)
+++ trunk/Source/WebKit/ChangeLog	2021-03-04 09:09:40 UTC (rev 273878)
@@ -1,5 +1,46 @@
 2021-03-04  Kimmo Kinnunen  <kkinnu...@apple.com>
 
+        IPC stream feature should use client/server naming instead of sender/receiver
+        https://bugs.webkit.org/show_bug.cgi?id=222592
+
+        Reviewed by Antti Koivisto.
+
+        Attempt to simplify already complicated implementation of the stream
+        implementation. Uses of "sender" and "receiver" were a leftover from
+        early phase of the implementation.
+
+        Rename all remaining instances of "sender" with "client".
+        Rename all remaining instances of "receiver" with "server".
+
+        No new tests, a refactor.
+
+        * Platform/IPC/StreamClientConnection.cpp:
+        (IPC::StreamClientConnection::StreamClientConnection):
+        (IPC::StreamClientConnection::setWakeUpSemaphore):
+        (IPC::StreamClientConnection::wakeUpServer):
+        * Platform/IPC/StreamClientConnection.h:
+        (IPC::StreamClientConnection::send):
+        (IPC::StreamClientConnection::trySendDestinationIDIfNeeded):
+        (IPC::StreamClientConnection::tryAcquire):
+        (IPC::StreamClientConnection::release):
+        * Platform/IPC/StreamConnectionBuffer.cpp:
+        (IPC::StreamConnectionBuffer::StreamConnectionBuffer):
+        (IPC::StreamConnectionBuffer::operator=):
+        (IPC::StreamConnectionBuffer::encode const):
+        * Platform/IPC/StreamConnectionBuffer.h:
+        (IPC::StreamConnectionBuffer::clientOffset):
+        (IPC::StreamConnectionBuffer::serverOffset):
+        (IPC::StreamConnectionBuffer::clientWaitSemaphore):
+        (IPC::StreamConnectionBuffer::maximumSize):
+        * Platform/IPC/StreamServerConnection.cpp:
+        (IPC::StreamServerConnectionBase::tryAquire):
+        (IPC::StreamServerConnectionBase::release):
+        * Platform/IPC/StreamServerConnection.h:
+        (IPC::StreamServerConnectionBase::sharedClientOffset):
+        (IPC::StreamServerConnectionBase::sharedServerOffset):
+
+2021-03-04  Kimmo Kinnunen  <kkinnu...@apple.com>
+
         Adding new test conditions for WebGL should be simpler
         https://bugs.webkit.org/show_bug.cgi?id=222593
 

Modified: trunk/Source/WebKit/Platform/IPC/StreamClientConnection.cpp (273877 => 273878)


--- trunk/Source/WebKit/Platform/IPC/StreamClientConnection.cpp	2021-03-04 09:00:18 UTC (rev 273877)
+++ trunk/Source/WebKit/Platform/IPC/StreamClientConnection.cpp	2021-03-04 09:09:40 UTC (rev 273878)
@@ -33,9 +33,9 @@
     , m_buffer(size)
 {
     // Read starts from 0 with limit of 0 and reader sleeping.
-    sharedSenderOffset().store(StreamConnectionBuffer::senderOffsetReceiverIsSleepingTag, std::memory_order_relaxed);
+    sharedClientOffset().store(StreamConnectionBuffer::clientOffsetServerIsSleepingTag, std::memory_order_relaxed);
     // Write starts from 0 with a limit of the whole buffer.
-    sharedReceiverOffset().store(0, std::memory_order_relaxed);
+    sharedServerOffset().store(0, std::memory_order_relaxed);
 }
 
 void StreamClientConnection::setWakeUpSemaphore(IPC::Semaphore&& semaphore)
@@ -43,10 +43,10 @@
 #if PLATFORM(COCOA)
     m_wakeUpSemaphore = WTFMove(semaphore);
 #endif
-    wakeUpReceiver();
+    wakeUpServer();
 }
 
-void StreamClientConnection::wakeUpReceiver()
+void StreamClientConnection::wakeUpServer()
 {
 #if PLATFORM(COCOA)
     if (m_wakeUpSemaphore)

Modified: trunk/Source/WebKit/Platform/IPC/StreamClientConnection.h (273877 => 273878)


--- trunk/Source/WebKit/Platform/IPC/StreamClientConnection.h	2021-03-04 09:00:18 UTC (rev 273877)
+++ trunk/Source/WebKit/Platform/IPC/StreamClientConnection.h	2021-03-04 09:09:40 UTC (rev 273878)
@@ -36,13 +36,13 @@
 #include <wtf/Threading.h>
 namespace IPC {
 
-// A message stream is a half-duplex two-way stream of messages to a between a sender and the
-// destination receiver.
+// A message stream is a half-duplex two-way stream of messages to a between the client and the
+// server.
 //
 // StreamClientConnection can send messages and receive synchronous replies
 // through this message stream or through IPC::Connection.
 //
-// The destination receiver will receive messages in order _for the destination messages_.
+// The server will receive messages in order _for the destination messages_.
 // The whole IPC::Connection message order is not preserved.
 //
 // The StreamClientConnection trusts the StreamServerConnection.
@@ -71,12 +71,12 @@
     void sendProcessOutOfStreamMessage(Span&&);
 
     Optional<Span> tryAcquire(Timeout);
-    enum class WakeUpReceiver : bool {
+    enum class WakeUpServer : bool {
         No,
         Yes
     };
-    WakeUpReceiver release(size_t writeSize);
-    void wakeUpReceiver();
+    WakeUpServer release(size_t writeSize);
+    void wakeUpServer();
 
     Span alignedSpan(size_t offset, size_t limit);
     size_t size(size_t offset, size_t limit);
@@ -84,8 +84,8 @@
 
     size_t wrapOffset(size_t offset) const { return m_buffer.wrapOffset(offset); }
     size_t alignOffset(size_t offset) const { return m_buffer.alignOffset<messageAlignment>(offset, minimumMessageSize); }
-    Atomic<size_t>& sharedSenderOffset() { return m_buffer.senderOffset(); }
-    Atomic<size_t>& sharedReceiverOffset() { return m_buffer.receiverOffset(); }
+    Atomic<size_t>& sharedClientOffset() { return m_buffer.clientOffset(); }
+    Atomic<size_t>& sharedServerOffset() { return m_buffer.serverOffset(); }
     uint8_t* data() const { return m_buffer.data(); }
     size_t dataSize() const { return m_buffer.dataSize(); }
 
@@ -92,7 +92,7 @@
     Connection& m_connection;
     uint64_t m_currentDestinationID { 0 };
 
-    size_t m_senderOffset { 0 };
+    size_t m_clientOffset { 0 };
     StreamConnectionBuffer m_buffer;
 #if PLATFORM(COCOA)
     Optional<Semaphore> m_wakeUpSemaphore;
@@ -112,8 +112,8 @@
         StreamConnectionEncoder messageEncoder { T::name(), span->data, span->size };
         if (messageEncoder << message.arguments()) {
             auto wakeupResult = release(messageEncoder.size());
-            if (wakeupResult == StreamClientConnection::WakeUpReceiver::Yes)
-                wakeUpReceiver();
+            if (wakeupResult == StreamClientConnection::WakeUpServer::Yes)
+                wakeUpServer();
             return true;
         }
     }
@@ -153,8 +153,8 @@
         return false;
     }
     auto wakeupResult = release(encoder.size());
-    if (wakeupResult == StreamClientConnection::WakeUpReceiver::Yes)
-        wakeUpReceiver();
+    if (wakeupResult == StreamClientConnection::WakeUpServer::Yes)
+        wakeUpServer();
     m_currentDestinationID = destinationID;
     return true;
 }
@@ -169,18 +169,18 @@
 inline Optional<StreamClientConnection::Span> StreamClientConnection::tryAcquire(Timeout timeout)
 {
     for (;;) {
-        size_t senderLimit = clampedLimit(sharedReceiverOffset().load(std::memory_order_acquire));
-        auto result = alignedSpan(m_senderOffset, senderLimit);
+        size_t clientLimit = clampedLimit(sharedServerOffset().load(std::memory_order_acquire));
+        auto result = alignedSpan(m_clientOffset, clientLimit);
         if (result.size < minimumMessageSize) {
             if (timeout.didTimeOut())
                 break;
 #if PLATFORM(COCOA)
-            size_t oldSenderLimit = sharedReceiverOffset().compareExchangeStrong(senderLimit, StreamConnectionBuffer::receiverOffsetSenderIsWaitingTag, std::memory_order_acq_rel, std::memory_order_acq_rel);
-            if (senderLimit == oldSenderLimit)
-                m_buffer.senderWaitSemaphore().waitFor(timeout);
+            size_t oldClientLimit = sharedServerOffset().compareExchangeStrong(clientLimit, StreamConnectionBuffer::serverOffsetClientIsWaitingTag, std::memory_order_acq_rel, std::memory_order_acq_rel);
+            if (clientLimit == oldClientLimit)
+                m_buffer.clientWaitSemaphore().waitFor(timeout);
             else {
-                senderLimit = clampedLimit(oldSenderLimit);
-                result = alignedSpan(m_senderOffset, senderLimit);
+                clientLimit = clampedLimit(oldClientLimit);
+                result = alignedSpan(m_clientOffset, clientLimit);
             }
 #else
             Thread::yield();
@@ -191,23 +191,23 @@
         // The alignedSpan uses the minimumMessageSize to calculate the next beginning position in the buffer,
         // and not the size. The size might be more or less what is needed, depending on where the reader is.
         // If there is no capacity for minimum message size, wait until more is available.
-        // In the case where senderOffset < receiverOffset we can arrive to a situation where
+        // In the case where clientOffset < serverOffset we can arrive to a situation where
         // 0 < result.size < minimumMessageSize.
     }
     return WTF::nullopt;
 }
 
-inline StreamClientConnection::WakeUpReceiver StreamClientConnection::release(size_t size)
+inline StreamClientConnection::WakeUpServer StreamClientConnection::release(size_t size)
 {
     size = std::max(size, minimumMessageSize);
-    m_senderOffset = wrapOffset(alignOffset(m_senderOffset) + size);
-    ASSERT(m_senderOffset < dataSize());
-    // If the receiver wrote over the senderOffset with senderOffsetReceiverIsSleepingTag, we know it is sleeping.
-    size_t receiverLimit = sharedSenderOffset().exchange(m_senderOffset, std::memory_order_acq_rel);
-    if (receiverLimit == StreamConnectionBuffer::senderOffsetReceiverIsSleepingTag)
-        return WakeUpReceiver::Yes;
-    ASSERT(!(receiverLimit & StreamConnectionBuffer::senderOffsetReceiverIsSleepingTag));
-    return WakeUpReceiver::No;
+    m_clientOffset = wrapOffset(alignOffset(m_clientOffset) + size);
+    ASSERT(m_clientOffset < dataSize());
+    // If the server wrote over the clientOffset with clientOffsetServerIsSleepingTag, we know it is sleeping.
+    size_t serverLimit = sharedClientOffset().exchange(m_clientOffset, std::memory_order_acq_rel);
+    if (serverLimit == StreamConnectionBuffer::clientOffsetServerIsSleepingTag)
+        return WakeUpServer::Yes;
+    ASSERT(!(serverLimit & StreamConnectionBuffer::clientOffsetServerIsSleepingTag));
+    return WakeUpServer::No;
 }
 
 inline StreamClientConnection::Span StreamClientConnection::alignedSpan(size_t offset, size_t limit)

Modified: trunk/Source/WebKit/Platform/IPC/StreamConnectionBuffer.cpp (273877 => 273878)


--- trunk/Source/WebKit/Platform/IPC/StreamConnectionBuffer.cpp	2021-03-04 09:00:18 UTC (rev 273877)
+++ trunk/Source/WebKit/Platform/IPC/StreamConnectionBuffer.cpp	2021-03-04 09:09:40 UTC (rev 273878)
@@ -45,10 +45,10 @@
     ASSERT(m_dataSize <= maximumSize());
 }
 
-StreamConnectionBuffer::StreamConnectionBuffer(Ref<WebKit::SharedMemory>&& memory, size_t memorySize, Semaphore&& senderWaitSemaphore)
+StreamConnectionBuffer::StreamConnectionBuffer(Ref<WebKit::SharedMemory>&& memory, size_t memorySize, Semaphore&& clientWaitSemaphore)
     : m_dataSize(memorySize - headerSize())
     , m_sharedMemory(WTFMove(memory))
-    , m_senderWaitSemaphore(WTFMove(senderWaitSemaphore))
+    , m_clientWaitSemaphore(WTFMove(clientWaitSemaphore))
 {
     ASSERT(m_dataSize <= maximumSize());
 }
@@ -62,7 +62,7 @@
     if (this != &other) {
         m_dataSize = other.m_dataSize;
         m_sharedMemory = WTFMove(other.m_sharedMemory);
-        m_senderWaitSemaphore = WTFMove(other.m_senderWaitSemaphore);
+        m_clientWaitSemaphore = WTFMove(other.m_clientWaitSemaphore);
     }
     return *this;
 }
@@ -74,7 +74,7 @@
         CRASH();
     WebKit::SharedMemory::IPCHandle ipcHandle { WTFMove(handle), m_sharedMemory->size() };
     encoder << ipcHandle;
-    encoder << m_senderWaitSemaphore;
+    encoder << m_clientWaitSemaphore;
 }
 
 Optional<StreamConnectionBuffer> StreamConnectionBuffer::decode(Decoder& decoder)

Modified: trunk/Source/WebKit/Platform/IPC/StreamConnectionBuffer.h (273877 => 273878)


--- trunk/Source/WebKit/Platform/IPC/StreamConnectionBuffer.h	2021-03-04 09:00:18 UTC (rev 273877)
+++ trunk/Source/WebKit/Platform/IPC/StreamConnectionBuffer.h	2021-03-04 09:09:40 UTC (rev 273878)
@@ -33,36 +33,30 @@
 
 namespace IPC {
 
-// StreamConnectionBuffer is a shared "bi-partite" circular buffer supporting
-// variable length messages, specific data alignment with mandated minimum size.
-// StreamClientConnection and StreamServerConnection use StreamConnectionBuffer to communicate.
+// StreamConnectionBuffer is a shared "bi-partite" circular buffer supporting variable length messages, specific data
+// alignment with mandated minimum size. StreamClientConnection and StreamServerConnection use StreamConnectionBuffer to
+// communicate.
 //
-// The "bi-partite" is here to mean that writes and reads to the buffer must be
-// continuous.
+// The "bi-partite" is here to mean that writes and reads to the buffer must be continuous.
 //
-// The client (sender or receiver) "acquires" some amount of buffer data. The data pointer
-// location depends on the amount of data being acquired. The buffer returns all the available
-// capacity -- this may be less than acquired.
+// The caller (client or server) "acquires" some amount of buffer data. The data pointer location depends on the amount
+// of data being acquired. The buffer returns all the available capacity -- this may be less than acquired.
 //
-// The client "releases" the some amount of data, at least the amount acquired but potentially
-// more.
+// The caller "releases" the some amount of data, at least the amount acquired but potentially more.
 //
-// Both sender and receiver must release the same amount of data at the same step of the acquire/release sequence.
-// Suppose sender releases first 8 and then 166 bytes. Upon the first acquire, receiver
-// must also release 8 bytes and then upon the second acquire 166 bytes.
-// Due to how alignment and minimum length affect the position at which the memory can
-// be referred to, the receiver cannot "read two times simultaneously" and release 174 bytes.
+// Both the client and the server must release the same amount of data at the same step of the acquire/release sequence.
+// Suppose the client releases first 8 and then 166 bytes. Upon the first acquire, the server must also release 8 bytes
+// and then upon the second acquire 166 bytes. Due to how alignment and minimum length affect the position at which the
+// memory can be referred to, the server cannot "read two times simultaneously" and release 174 bytes.
 //
 // The circular buffer has following implementation:
-// * Sender owns the data between [senderOffset, receiverOffset[. When senderOffset ==
-// receiverOffset, sender owns all the data.
-// * Receiver owns the data between [receiverOffset, senderOffset[.
-// * The buffer can hold maximum of size - 1 values. The last value is reserved for
-// indicating that the buffer is full. FIXME: Maybe would be simpler implementation if
-// it would use the "wrap" flag instead of the hole as the indicator. This would move
-// the alignedSpan implementation to the StreamConnectionBuffer.
-// * All atomic variable loads are untrusted, so they're clamped. Violations are not reported,
-// though.
+// * The client owns the data between [clientOffset, serverOffset[. When clientOffset == serverOffset, the client owns
+//   all the data.
+// * The server owns the data between [serverOffset, clientOffset[.
+// * The buffer can hold maximum of size - 1 values. The last value is reserved for indicating that the buffer is full.
+//   FIXME: Maybe would be simpler implementation if it would use the "wrap" flag instead of the hole as the indicator.
+//   This would move the alignedSpan implementation to the StreamConnectionBuffer.
+// * All atomic variable loads are untrusted, so they're clamped. Violations are not reported, though.
 // See SharedDisplayListHandle.
 class StreamConnectionBuffer {
 public:
@@ -88,30 +82,30 @@
         return offset;
     }
 
-    Atomic<size_t>& senderOffset() { return header().senderOffset; }
-    Atomic<size_t>& receiverOffset() { return header().receiverOffset; }
+    Atomic<size_t>& clientOffset() { return header().clientOffset; }
+    Atomic<size_t>& serverOffset() { return header().serverOffset; }
     uint8_t* data() const { return static_cast<uint8_t*>(m_sharedMemory->data()) + headerSize(); }
     size_t dataSize() const { return m_dataSize; }
-    Semaphore& senderWaitSemaphore() { return m_senderWaitSemaphore; }
+    Semaphore& clientWaitSemaphore() { return m_clientWaitSemaphore; }
 
-    // Tag value stored in Header::senderOffset when receiver is sleeping, e.g. not running.
-    static constexpr size_t senderOffsetReceiverIsSleepingTag = 1 << 31;
-    // Tag value stored in Header::receiverOffset when sender is waiting, e.g. waiting on
+    // Tag value stored in Header::clientOffset when the server is sleeping, e.g. not running.
+    static constexpr size_t clientOffsetServerIsSleepingTag = 1 << 31;
+    // Tag value stored in Header::serverOffset when the client is waiting, e.g. waiting on
     // a semaphore.
-    static constexpr size_t receiverOffsetSenderIsWaitingTag = 1 << 31;
+    static constexpr size_t serverOffsetClientIsWaitingTag = 1 << 31;
 
-    static constexpr size_t maximumSize() { return std::min(senderOffsetReceiverIsSleepingTag, senderOffsetReceiverIsSleepingTag) - 1; }
+    static constexpr size_t maximumSize() { return std::min(clientOffsetServerIsSleepingTag, clientOffsetServerIsSleepingTag) - 1; }
     void encode(Encoder&) const;
     static Optional<StreamConnectionBuffer> decode(Decoder&);
 
 private:
-    StreamConnectionBuffer(Ref<WebKit::SharedMemory>&&, size_t memorySize, Semaphore&& senderWaitSemaphore);
+    StreamConnectionBuffer(Ref<WebKit::SharedMemory>&&, size_t memorySize, Semaphore&& clientWaitSemaphore);
 
     struct Header {
-        Atomic<size_t> receiverOffset;
+        Atomic<size_t> serverOffset;
         // Padding so that the variables mostly accessed by different processes do not share a cache line.
         // This is an attempt to avoid cache-line induced reduction of parallel access.
-        alignas(sizeof(uint64_t[2])) Atomic<size_t> senderOffset;
+        alignas(sizeof(uint64_t[2])) Atomic<size_t> clientOffset;
     };
     Header& header() const { return *reinterpret_cast<Header*>(m_sharedMemory->data()); }
     static constexpr size_t headerSize() { return roundUpToMultipleOf<alignof(std::max_align_t)>(sizeof(Header)); }
@@ -118,7 +112,7 @@
 
     size_t m_dataSize { 0 };
     Ref<WebKit::SharedMemory> m_sharedMemory;
-    Semaphore m_senderWaitSemaphore;
+    Semaphore m_clientWaitSemaphore;
 };
 
 }

Modified: trunk/Source/WebKit/Platform/IPC/StreamServerConnection.cpp (273877 => 273878)


--- trunk/Source/WebKit/Platform/IPC/StreamServerConnection.cpp	2021-03-04 09:00:18 UTC (rev 273877)
+++ trunk/Source/WebKit/Platform/IPC/StreamServerConnection.cpp	2021-03-04 09:09:40 UTC (rev 273878)
@@ -61,15 +61,15 @@
 
 Optional<StreamServerConnectionBase::Span> StreamServerConnectionBase::tryAquire()
 {
-    size_t receiverLimit = sharedSenderOffset().load(std::memory_order_acquire);
-    if (receiverLimit == StreamConnectionBuffer::senderOffsetReceiverIsSleepingTag)
+    size_t serverLimit = sharedClientOffset().load(std::memory_order_acquire);
+    if (serverLimit == StreamConnectionBuffer::clientOffsetServerIsSleepingTag)
         return WTF::nullopt;
-    auto result = alignedSpan(m_receiverOffset, receiverLimit);
+    auto result = alignedSpan(m_serverOffset, serverLimit);
     if (result.size < minimumMessageSize) {
-        receiverLimit = sharedSenderOffset().compareExchangeStrong(receiverLimit, StreamConnectionBuffer::senderOffsetReceiverIsSleepingTag, std::memory_order_acq_rel, std::memory_order_acq_rel);
-        ASSERT(!(receiverLimit & StreamConnectionBuffer::senderOffsetReceiverIsSleepingTag));
-        receiverLimit = clampedLimit(receiverLimit);
-        result = alignedSpan(m_receiverOffset, receiverLimit);
+        serverLimit = sharedClientOffset().compareExchangeStrong(serverLimit, StreamConnectionBuffer::clientOffsetServerIsSleepingTag, std::memory_order_acq_rel, std::memory_order_acq_rel);
+        ASSERT(!(serverLimit & StreamConnectionBuffer::clientOffsetServerIsSleepingTag));
+        serverLimit = clampedLimit(serverLimit);
+        result = alignedSpan(m_serverOffset, serverLimit);
     }
 
     if (result.size >= minimumMessageSize)
@@ -81,21 +81,21 @@
 {
     ASSERT(readSize);
     readSize = std::max(readSize, minimumMessageSize);
-    size_t receiverOffset = wrapOffset(alignOffset(m_receiverOffset) + readSize);
+    size_t serverOffset = wrapOffset(alignOffset(m_serverOffset) + readSize);
 
 #if PLATFORM(COCOA)
-    size_t oldReceiverOffset = sharedReceiverOffset().exchange(receiverOffset, std::memory_order_acq_rel);
-    // If the sender wrote over receiverOffset, it means the sender is waiting.
-    if (oldReceiverOffset == StreamConnectionBuffer::receiverOffsetSenderIsWaitingTag)
-        m_buffer.senderWaitSemaphore().signal();
+    size_t oldServerOffset = sharedServerOffset().exchange(serverOffset, std::memory_order_acq_rel);
+    // If the client wrote over serverOffset, it means the client is waiting.
+    if (oldServerOffset == StreamConnectionBuffer::serverOffsetClientIsWaitingTag)
+        m_buffer.clientWaitSemaphore().signal();
     else
-        ASSERT(!(oldReceiverOffset & StreamConnectionBuffer::receiverOffsetSenderIsWaitingTag));
+        ASSERT(!(oldServerOffset & StreamConnectionBuffer::serverOffsetClientIsWaitingTag));
 #else
-    sharedReceiverOffset().store(receiverOffset, std::memory_order_release);
+    sharedServerOffset().store(serverOffset, std::memory_order_release);
     // IPC::Semaphore not implemented for the platform. Client will poll and yield.
 #endif
 
-    m_receiverOffset = receiverOffset;
+    m_serverOffset = serverOffset;
 }
 
 StreamServerConnectionBase::Span StreamServerConnectionBase::alignedSpan(size_t offset, size_t limit)

Modified: trunk/Source/WebKit/Platform/IPC/StreamServerConnection.h (273877 => 273878)


--- trunk/Source/WebKit/Platform/IPC/StreamServerConnection.h	2021-03-04 09:00:18 UTC (rev 273877)
+++ trunk/Source/WebKit/Platform/IPC/StreamServerConnection.h	2021-03-04 09:09:40 UTC (rev 273878)
@@ -77,8 +77,8 @@
     size_t clampedLimit(size_t untrustedLimit) const;
     size_t wrapOffset(size_t offset) const { return m_buffer.wrapOffset(offset); }
     size_t alignOffset(size_t offset) const { return m_buffer.alignOffset<messageAlignment>(offset, minimumMessageSize); }
-    Atomic<size_t>& sharedSenderOffset() { return m_buffer.senderOffset(); }
-    Atomic<size_t>& sharedReceiverOffset() { return m_buffer.receiverOffset(); }
+    Atomic<size_t>& sharedClientOffset() { return m_buffer.clientOffset(); }
+    Atomic<size_t>& sharedServerOffset() { return m_buffer.serverOffset(); }
     uint8_t* data() const { return m_buffer.data(); }
     size_t dataSize() const { return m_buffer.dataSize(); }
 
@@ -85,7 +85,7 @@
     Ref<IPC::Connection> m_connection;
     StreamConnectionWorkQueue& m_workQueue;
 
-    size_t m_receiverOffset { 0 };
+    size_t m_serverOffset { 0 };
     StreamConnectionBuffer m_buffer;
 
     Lock m_outOfStreamMessagesLock;
@@ -103,10 +103,11 @@
     m_connection->sendSyncReply(WTFMove(encoder));
 }
 
-// StreamServerConnection represents the connection between stream sender and receiver, as used by the receiver.
+// StreamServerConnection represents the connection between stream client and server, as used by the server.
+//
 // StreamServerConnection:
-//  * Holds the messages towards the receiver.
-//  * Sends the replies back to the sender via the stream or normal Connection fallback.
+//  * Holds the messages towards the server.
+//  * Sends the replies back to the client via the stream or normal Connection fallback.
 //
 // Receiver template contract:
 //   void didReceiveStreamMessage(StreamServerConnectionBase&, Decoder&);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to