Index: services/ui/gpu/gpu_service.cc |
diff --git a/services/ui/gpu/gpu_service.cc b/services/ui/gpu/gpu_service.cc |
index 5fe9908bd2d7c5066507765f6c5f53b9e7324ad0..5864c64160314e74bef8cd0779b29309e3ce3093 100644 |
--- a/services/ui/gpu/gpu_service.cc |
+++ b/services/ui/gpu/gpu_service.cc |
@@ -74,6 +74,11 @@ const base::Callback<void(const Param&)> WrapCallback( |
runner, callback); |
} |
+void DestroyBinding( |
+ std::unique_ptr<mojo::BindingSet<mojom::GpuService>> binding) { |
+ binding->CloseAllBindings(); |
+} |
+ |
} // namespace |
GpuService::GpuService(const gpu::GPUInfo& gpu_info, |
@@ -99,7 +104,10 @@ GpuService::~GpuService() { |
logging::SetLogMessageHandler(nullptr); |
g_log_callback.Get() = |
base::Callback<void(int, size_t, const std::string&)>(); |
- bindings_.CloseAllBindings(); |
+ if (bindings_) { |
+ io_runner_->PostTask(FROM_HERE, |
+ base::Bind(&DestroyBinding, base::Passed(&bindings_))); |
+ } |
media_gpu_channel_manager_.reset(); |
gpu_channel_manager_.reset(); |
owned_sync_point_manager_.reset(); |
@@ -174,7 +182,9 @@ void GpuService::Bind(mojom::GpuServiceRequest request) { |
base::Passed(std::move(request)))); |
return; |
} |
- bindings_.AddBinding(this, std::move(request)); |
+ if (!bindings_) |
+ bindings_ = base::MakeUnique<mojo::BindingSet<mojom::GpuService>>(); |
+ bindings_->AddBinding(this, std::move(request)); |
} |
void GpuService::RecordLogMessage(int severity, |
@@ -348,10 +358,10 @@ void GpuService::EstablishGpuChannel( |
if (io_runner_->BelongsToCurrentThread()) { |
EstablishGpuChannelCallback wrap_callback = base::Bind( |
[](scoped_refptr<base::SingleThreadTaskRunner> runner, |
- const EstablishGpuChannelCallback& callback, |
+ const EstablishGpuChannelCallback& cb, |
mojo::ScopedMessagePipeHandle handle) { |
- runner->PostTask( |
- FROM_HERE, base::Bind(callback, base::Passed(std::move(handle)))); |
+ runner->PostTask(FROM_HERE, |
+ base::Bind(cb, base::Passed(std::move(handle)))); |
}, |
io_runner_, callback); |
main_runner_->PostTask( |