Changeset 136762 in webkit


Ignore:
Timestamp:
Dec 5, 2012, 2:16:44 PM (13 years ago)
Author:
andersca@apple.com
Message:

Connection::waitForMessage shouldn't use the message ID
https://bugs.webkit.org/show_bug.cgi?id=104157

Reviewed by Andreas Kling.

Pass the message receiver name and message name to waitForMessage and use them for lookups instead of
the message ID.

  • Platform/CoreIPC/Connection.cpp:

(CoreIPC::Connection::createSyncMessageEncoder):
(CoreIPC::Connection::waitForMessage):
(CoreIPC::Connection::processIncomingMessage):

  • Platform/CoreIPC/Connection.h:

(CoreIPC::Connection::waitForAndDispatchImmediately):

Location:
trunk/Source/WebKit2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r136760 r136762  
     12012-12-05  Anders Carlsson  <andersca@apple.com>
     2
     3        Connection::waitForMessage shouldn't use the message ID
     4        https://bugs.webkit.org/show_bug.cgi?id=104157
     5
     6        Reviewed by Andreas Kling.
     7
     8        Pass the message receiver name and message name to waitForMessage and use them for lookups instead of
     9        the message ID.
     10
     11        * Platform/CoreIPC/Connection.cpp:
     12        (CoreIPC::Connection::createSyncMessageEncoder):
     13        (CoreIPC::Connection::waitForMessage):
     14        (CoreIPC::Connection::processIncomingMessage):
     15        * Platform/CoreIPC/Connection.h:
     16        (CoreIPC::Connection::waitForAndDispatchImmediately):
     17
    1182012-12-05  Jae Hyun Park  <jae.park@company100.net>
    219
  • trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp

    r133045 r136762  
    284284}
    285285
    286 PassOwnPtr<MessageEncoder> Connection::createSyncMessageEncoder(const StringReference messageReceiverName, const StringReference messageName, uint64_t destinationID, uint64_t& syncRequestID)
     286PassOwnPtr<MessageEncoder> Connection::createSyncMessageEncoder(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID, uint64_t& syncRequestID)
    287287{
    288288    OwnPtr<MessageEncoder> encoder = MessageEncoder::create(messageReceiverName, messageName, destinationID);
     
    320320}
    321321
    322 PassOwnPtr<MessageDecoder> Connection::waitForMessage(MessageID messageID, uint64_t destinationID, double timeout)
     322PassOwnPtr<MessageDecoder> Connection::waitForMessage(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID, double timeout)
    323323{
    324324    // First, check if this message is already in the incoming messages queue.
     
    329329            IncomingMessage& message = *it;
    330330
    331             if (message.messageID() == messageID && message.arguments()->destinationID() == destinationID) {
     331            if (message.arguments()->messageReceiverName() == messageReceiverName && message.arguments()->messageName() == messageName && message.arguments()->destinationID() == destinationID) {
    332332                OwnPtr<MessageDecoder> decoder = message.releaseArguments();
    333333
     
    337337        }
    338338    }
    339    
     339
    340340    double absoluteTime = currentTime() + timeout;
    341341   
    342     std::pair<unsigned, uint64_t> messageAndDestination(std::make_pair(messageID.toInt(), destinationID));
     342    std::pair<std::pair<StringReference, StringReference>, uint64_t> messageAndDestination(std::make_pair(std::make_pair(messageReceiverName, messageName), destinationID));
    343343   
    344344    {
     
    349349   
    350350        // Insert our pending wait.
    351         m_waitForMessageMap.set(messageAndDestination, 0);
     351        m_waitForMessageMap.set(messageAndDestination, nullptr);
    352352    }
    353353   
     
    356356        MutexLocker locker(m_waitForMessageMutex);
    357357
    358         HashMap<std::pair<unsigned, uint64_t>, MessageDecoder*>::iterator it = m_waitForMessageMap.find(messageAndDestination);
     358        HashMap<std::pair<std::pair<StringReference, StringReference>, uint64_t>, OwnPtr<MessageDecoder> >::iterator it = m_waitForMessageMap.find(messageAndDestination);
    359359        if (it->value) {
    360             // FIXME: m_waitForMessageMap should really hold OwnPtrs to
    361             // ArgumentDecoders, but HashMap doesn't currently support OwnPtrs.
    362             OwnPtr<MessageDecoder> decoder = adoptPtr(it->value);
     360            OwnPtr<MessageDecoder> decoder = it->value.release();
    363361            m_waitForMessageMap.remove(it);
    364            
     362
    365363            return decoder.release();
    366364        }
     
    374372        }
    375373    }
    376    
     374
    377375    return nullptr;
    378376}
     
    524522    {
    525523        MutexLocker locker(m_waitForMessageMutex);
    526        
    527         HashMap<std::pair<unsigned, uint64_t>, MessageDecoder*>::iterator it = m_waitForMessageMap.find(std::make_pair(messageID.toInt(), incomingMessage.destinationID()));
     524
     525        HashMap<std::pair<std::pair<StringReference, StringReference>, uint64_t>, OwnPtr<MessageDecoder> >::iterator it = m_waitForMessageMap.find(std::make_pair(std::make_pair(incomingMessage.arguments()->messageReceiverName(), incomingMessage.arguments()->messageName()), incomingMessage.destinationID()));
    528526        if (it != m_waitForMessageMap.end()) {
    529             it->value = incomingMessage.releaseArguments().leakPtr();
     527            it->value = incomingMessage.releaseArguments();
    530528            ASSERT(it->value);
    531529       
  • trunk/Source/WebKit2/Platform/CoreIPC/Connection.h

    r133045 r136762  
    243243    bool isValid() const { return m_client; }
    244244   
    245     PassOwnPtr<MessageDecoder> waitForMessage(MessageID, uint64_t destinationID, double timeout);
     245    PassOwnPtr<MessageDecoder> waitForMessage(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID, double timeout);
    246246   
    247247    PassOwnPtr<MessageDecoder> waitForSyncReply(uint64_t syncRequestID, double timeout, unsigned syncSendFlags);
     
    301301    ThreadCondition m_waitForMessageCondition;
    302302    Mutex m_waitForMessageMutex;
    303     HashMap<std::pair<unsigned, uint64_t>, MessageDecoder*> m_waitForMessageMap;
     303    HashMap<std::pair<std::pair<StringReference, StringReference>, uint64_t>, OwnPtr<MessageDecoder> > m_waitForMessageMap;
    304304
    305305    // Represents a sync request for which we're waiting on a reply.
     
    427427template<typename T> bool Connection::waitForAndDispatchImmediately(uint64_t destinationID, double timeout)
    428428{
    429     OwnPtr<MessageDecoder> decoder = waitForMessage(MessageID(T::messageID), destinationID, timeout);
     429    OwnPtr<MessageDecoder> decoder = waitForMessage(T::receiverName(), T::name(), destinationID, timeout);
    430430    if (!decoder)
    431431        return false;
Note: See TracChangeset for help on using the changeset viewer.