Commit c4ab7a09 authored by Brook Hong's avatar Brook Hong Committed by Commit Bot

Remove Unfreezable TaskRunner on RenderThreadImpl::RemoveRoute

The task runner (`base::sequence_manager::internal::TaskQueueImpl::TaskRunner`
 -- child of `base::SingleThreadTaskRunner`) being held in
`unfreezable_message_filter_` refers to an object of
`base::sequence_manager::internal::TaskQueueImpl::GuardedTaskPoster`,
which holds an object of `base::internal::OperationsController`, which
then holds an object of `base::WaitableEvent`, which finnally holds an
open mach port.

The issue also impacts other systems like Windows / Linux.

Bug: 1063577
Change-Id: I5e34c71953835d9312360d349072ec4809f00d11
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2132536Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#755872}
parent ecef79d7
...@@ -149,6 +149,7 @@ Brian Konzman, SJ <b.g.konzman@gmail.com> ...@@ -149,6 +149,7 @@ Brian Konzman, SJ <b.g.konzman@gmail.com>
Brian Luft <brian@electroly.com> Brian Luft <brian@electroly.com>
Brian Merrell, Novell Inc. <bgmerrell@gmail.com> Brian Merrell, Novell Inc. <bgmerrell@gmail.com>
Brian Yip <itsbriany@gmail.com> Brian Yip <itsbriany@gmail.com>
Brook Hong <hzgmaxwell@gmail.com>
Bruno Calvignac <bruno@flock.com> Bruno Calvignac <bruno@flock.com>
Bruno de Oliveira Abinader <brunoabinader@gmail.com> Bruno de Oliveira Abinader <brunoabinader@gmail.com>
Bruno Roy <brusi_roy@hotmail.com> Bruno Roy <brusi_roy@hotmail.com>
......
...@@ -903,6 +903,7 @@ void RenderThreadImpl::AddRoute(int32_t routing_id, IPC::Listener* listener) { ...@@ -903,6 +903,7 @@ void RenderThreadImpl::AddRoute(int32_t routing_id, IPC::Listener* listener) {
void RenderThreadImpl::RemoveRoute(int32_t routing_id) { void RenderThreadImpl::RemoveRoute(int32_t routing_id) {
ChildThreadImpl::GetRouter()->RemoveRoute(routing_id); ChildThreadImpl::GetRouter()->RemoveRoute(routing_id);
unfreezable_message_filter_->RemoveListenerUnfreezableTaskRunner(routing_id);
GetChannel()->RemoveListenerTaskRunner(routing_id); GetChannel()->RemoveListenerTaskRunner(routing_id);
} }
...@@ -2299,6 +2300,14 @@ void RenderThreadImpl::UnfreezableMessageFilter:: ...@@ -2299,6 +2300,14 @@ void RenderThreadImpl::UnfreezableMessageFilter::
std::move(unfreezable_task_runner)); std::move(unfreezable_task_runner));
} }
// Called on the listener thread.
void RenderThreadImpl::UnfreezableMessageFilter::
RemoveListenerUnfreezableTaskRunner(
int32_t routing_id) {
base::AutoLock lock(unfreezable_task_runners_lock_);
unfreezable_task_runners_.erase(routing_id);
}
// Called on the I/O thread. // Called on the I/O thread.
scoped_refptr<base::SingleThreadTaskRunner> scoped_refptr<base::SingleThreadTaskRunner>
RenderThreadImpl::UnfreezableMessageFilter::GetUnfreezableTaskRunner( RenderThreadImpl::UnfreezableMessageFilter::GetUnfreezableTaskRunner(
......
...@@ -328,6 +328,10 @@ class CONTENT_EXPORT RenderThreadImpl ...@@ -328,6 +328,10 @@ class CONTENT_EXPORT RenderThreadImpl
int32_t routing_id, int32_t routing_id,
scoped_refptr<base::SingleThreadTaskRunner> unfreezable_task_runner); scoped_refptr<base::SingleThreadTaskRunner> unfreezable_task_runner);
// Removes |unfreezable_task_runner| for the task to be executed later.
void RemoveListenerUnfreezableTaskRunner(
int32_t routing_id);
// Called on the I/O thread. // Called on the I/O thread.
// Returns the unfreezable task runner associated with |routing_id|. // Returns the unfreezable task runner associated with |routing_id|.
scoped_refptr<base::SingleThreadTaskRunner> GetUnfreezableTaskRunner( scoped_refptr<base::SingleThreadTaskRunner> GetUnfreezableTaskRunner(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment