summaryrefslogtreecommitdiffstats
path: root/components/mus/gles2/command_buffer_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'components/mus/gles2/command_buffer_impl.cc')
-rw-r--r--components/mus/gles2/command_buffer_impl.cc19
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