author | Andrew McCreight <continuation@gmail.com> |
Tue, 28 Oct 2014 13:53:15 -0700 | |
changeset 212791 | d2c6c62f63bf4797a45aeb0a59050c8baa537b08 |
parent 212757 | ed2cdcdb52408e549b5f5d47c6ebc02d506d83bb |
child 212792 | 553410a1e458aec396354dab12e7b2d77e8db542 |
push id | 27730 |
push user | cbook@mozilla.com |
push date | Wed, 29 Oct 2014 12:26:03 +0000 |
treeherder | mozilla-central@fe5c1cb8075a [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | billm |
bugs | 1089833 |
milestone | 36.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/ipc/glue/MessageChannel.cpp +++ b/ipc/glue/MessageChannel.cpp @@ -654,17 +654,17 @@ MessageChannel::OnMessageReceivedFromLin mWorkerLoop->PostTask(FROM_HERE, new DequeueTask(mDequeueOneTask)); } } } bool MessageChannel::Send(Message* aMsg, Message* aReply) { - // See comment in DispatchUrgentMessage. + // See comment in DispatchSyncMessage. MaybeScriptBlocker scriptBlocker(this, true); // Sanity checks. AssertWorkerThread(); mMonitor->AssertNotCurrentThreadOwns(); #ifdef OS_WIN SyncStackFrame frame(this, false); @@ -1050,17 +1050,17 @@ MessageChannel::DispatchMessage(const Me DispatchAsyncMessage(aMsg); } void MessageChannel::DispatchSyncMessage(const Message& aMsg) { AssertWorkerThread(); - Message *reply = nullptr; + nsAutoPtr<Message> reply; int prio = aMsg.priority(); // We don't want to run any code that might run a nested event loop here, so // we avoid running event handlers. Once we've sent the response to the // urgent message, it's okay to run event handlers again since the parent is // no longer blocked. MOZ_ASSERT_IF(prio > IPC::Message::PRIORITY_NORMAL, NS_IsMainThread()); @@ -1074,32 +1074,32 @@ MessageChannel::DispatchSyncMessage(cons bool dummy; bool& blockingVar = ShouldBlockScripts() ? gParentIsBlocked : dummy; Result rv; { AutoSetValue<bool> blocked(blockingVar, true); AutoSetValue<bool> sync(mDispatchingSyncMessage, true); AutoSetValue<int> prioSet(mDispatchingSyncMessagePriority, prio); - rv = mListener->OnMessageReceived(aMsg, reply); + rv = mListener->OnMessageReceived(aMsg, *getter_Transfers(reply)); } if (!MaybeHandleError(rv, aMsg, "DispatchSyncMessage")) { - delete reply; reply = new Message(); reply->set_sync(); reply->set_priority(aMsg.priority()); reply->set_reply(); reply->set_reply_error(); } reply->set_seqno(aMsg.seqno()); MonitorAutoLock lock(*mMonitor); - if (ChannelConnected == mChannelState) - mLink->SendMessage(reply); + if (ChannelConnected == mChannelState) { + mLink->SendMessage(reply.forget()); + } } void MessageChannel::DispatchAsyncMessage(const Message& aMsg) { AssertWorkerThread(); MOZ_ASSERT(!aMsg.is_interrupt() && !aMsg.is_sync()); @@ -1164,34 +1164,34 @@ MessageChannel::DispatchInterruptMessage // to fix up the mRemoteStackDepthGuess here, because we're just about // to increment it in DispatchCall(), which will make it correct again. } #ifdef OS_WIN SyncStackFrame frame(this, true); #endif - Message* reply = nullptr; + nsAutoPtr<Message> reply; ++mRemoteStackDepthGuess; - Result rv = mListener->OnCallReceived(aMsg, reply); + Result rv = mListener->OnCallReceived(aMsg, *getter_Transfers(reply)); --mRemoteStackDepthGuess; if (!MaybeHandleError(rv, aMsg, "DispatchInterruptMessage")) { - delete reply; reply = new Message(); reply->set_interrupt(); reply->set_reply(); reply->set_reply_error(); } reply->set_seqno(aMsg.seqno()); MonitorAutoLock lock(*mMonitor); - if (ChannelConnected == mChannelState) - mLink->SendMessage(reply); + if (ChannelConnected == mChannelState) { + mLink->SendMessage(reply.forget()); + } } void MessageChannel::MaybeUndeferIncall() { AssertWorkerThread(); mMonitor->AssertCurrentThreadOwns();