mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 1240985 - Return false when trying to Send while dispatching urgent (r=dvander)
This commit is contained in:
parent
adab8ac1e6
commit
961f4af53c
@ -916,15 +916,31 @@ MessageChannel::Send(Message* aMsg, Message* aReply)
|
|||||||
{
|
{
|
||||||
// Don't allow sending CPOWs while we're dispatching a sync message.
|
// Don't allow sending CPOWs while we're dispatching a sync message.
|
||||||
// If you want to do that, use sendRpcMessage instead.
|
// If you want to do that, use sendRpcMessage instead.
|
||||||
|
IPC_LOG("Prio forbids send");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mCurrentTransaction &&
|
||||||
|
(DispatchingSyncMessagePriority() == IPC::Message::PRIORITY_URGENT ||
|
||||||
|
DispatchingAsyncMessagePriority() == IPC::Message::PRIORITY_URGENT))
|
||||||
|
{
|
||||||
|
// Generally only the parent dispatches urgent messages. And the only
|
||||||
|
// sync messages it can send are high-priority. Mainly we want to ensure
|
||||||
|
// here that we don't return false for non-CPOW messages.
|
||||||
|
MOZ_ASSERT(msg->priority() == IPC::Message::PRIORITY_HIGH);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mCurrentTransaction &&
|
if (mCurrentTransaction &&
|
||||||
(msg->priority() < DispatchingSyncMessagePriority() ||
|
(msg->priority() < DispatchingSyncMessagePriority() ||
|
||||||
mAwaitingSyncReplyPriority > msg->priority()))
|
msg->priority() < AwaitingSyncReplyPriority()))
|
||||||
{
|
{
|
||||||
|
MOZ_ASSERT(DispatchingSyncMessage() || DispatchingAsyncMessage());
|
||||||
|
IPC_LOG("Cancel from Send");
|
||||||
|
CancelMessage *cancel = new CancelMessage();
|
||||||
|
cancel->set_transaction_id(mCurrentTransaction);
|
||||||
|
mLink->SendMessage(cancel);
|
||||||
CancelCurrentTransactionInternal();
|
CancelCurrentTransactionInternal();
|
||||||
mLink->SendMessage(new CancelMessage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IPC_ASSERT(msg->is_sync(), "can only Send() sync messages here");
|
IPC_ASSERT(msg->is_sync(), "can only Send() sync messages here");
|
||||||
|
Loading…
Reference in New Issue
Block a user