Chromium Code Reviews| Index: media/gpu/ipc/service/gpu_video_encode_accelerator.cc |
| diff --git a/media/gpu/ipc/service/gpu_video_encode_accelerator.cc b/media/gpu/ipc/service/gpu_video_encode_accelerator.cc |
| index 533e2cd95de4ed3640239454d8f7c89de8e65849..f51855b46e2f3e965935297a0098d4b41bdccc57 100644 |
| --- a/media/gpu/ipc/service/gpu_video_encode_accelerator.cc |
| +++ b/media/gpu/ipc/service/gpu_video_encode_accelerator.cc |
| @@ -182,13 +182,7 @@ GpuVideoEncodeAccelerator::~GpuVideoEncodeAccelerator() { |
| // This class can only be self-deleted from OnWillDestroyStub(), which means |
| // the VEA has already been destroyed in there. |
| DCHECK(!encoder_); |
| - if (encoder_worker_thread_.IsRunning()) { |
| - encoder_worker_task_runner_->PostTask( |
| - FROM_HERE, |
| - base::Bind(&GpuVideoEncodeAccelerator::DestroyOnEncoderWorker, |
| - weak_this_factory_for_encoder_worker_.GetWeakPtr())); |
| - encoder_worker_thread_.Stop(); |
| - } |
| + DCHECK(!encoder_worker_thread_.IsRunning()); |
| } |
| bool GpuVideoEncodeAccelerator::Initialize(VideoPixelFormat input_format, |
| @@ -325,6 +319,16 @@ void GpuVideoEncodeAccelerator::OnWillDestroyStub() { |
| filter_removed_.Wait(); |
| } |
| + // We should stop |encoder_worker_thread_| before releasing |encoder_|, see |
| + // crbug.com/715759. |
| + if (encoder_worker_thread_.IsRunning()) { |
| + encoder_worker_task_runner_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&GpuVideoEncodeAccelerator::DestroyOnEncoderWorker, |
| + weak_this_factory_for_encoder_worker_.GetWeakPtr())); |
|
sandersd (OOO until July 31)
2017/04/28 00:47:44
This WeakPtrFactory should probably not be vending
emircan
2017/04/28 01:11:09
Sure. I changed it such that we use copies of the
sandersd (OOO until July 31)
2017/04/28 18:22:44
Please document this in the header file, the curre
emircan
2017/04/29 00:10:46
Done.
|
| + encoder_worker_thread_.Stop(); |
| + } |
| + |
| stub_->channel()->RemoveRoute(host_route_id_); |
| stub_->RemoveDestructionObserver(this); |
| encoder_.reset(); |
| @@ -517,6 +521,9 @@ void GpuVideoEncodeAccelerator::OnEncodeFrameCreated( |
| DVLOG(3) << __func__; |
| DCHECK(CheckIfCalledOnCorrectThread()); |
| + if (filter_removed_.IsSignaled()) |
| + return; |
| + |
| if (!frame) { |
| DLOG(ERROR) << __func__ << " could not create a frame"; |
| NotifyError(VideoEncodeAccelerator::kPlatformFailureError); |