diff options
Diffstat (limited to 'components/mus/gles2/command_buffer_impl.cc')
| -rw-r--r-- | components/mus/gles2/command_buffer_impl.cc | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/components/mus/gles2/command_buffer_impl.cc b/components/mus/gles2/command_buffer_impl.cc index adb5845..13ce77c 100644 --- a/components/mus/gles2/command_buffer_impl.cc +++ b/components/mus/gles2/command_buffer_impl.cc @@ -280,10 +280,17 @@ void CommandBufferImpl::OnConnectionError() { binding_.reset(); // Objects we own (such as CommandBufferDriver) need to be destroyed on the - // thread we were created on. - gpu_state_->command_buffer_task_runner()->PostTask( - driver_.get(), base::Bind(&CommandBufferImpl::DeleteOnGpuThread, - base::Unretained(this))); + // thread we were created on. It's entirely possible we haven't or are in the + // process of creating |driver_|. + if (driver_) { + gpu_state_->command_buffer_task_runner()->PostTask( + driver_.get(), base::Bind(&CommandBufferImpl::DeleteOnGpuThread, + base::Unretained(this))); + } else { + gpu_state_->command_buffer_task_runner()->task_runner()->PostTask( + FROM_HERE, base::Bind(&CommandBufferImpl::DeleteOnGpuThread2, + base::Unretained(this))); + } } bool CommandBufferImpl::DeleteOnGpuThread() { @@ -291,4 +298,8 @@ bool CommandBufferImpl::DeleteOnGpuThread() { return true; } +void CommandBufferImpl::DeleteOnGpuThread2() { + delete this; +} + } // namespace mus |
