| Index: third_party/WebKit/Source/modules/webgl/WebGLProgram.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webgl/WebGLProgram.cpp b/third_party/WebKit/Source/modules/webgl/WebGLProgram.cpp
|
| index e75362f0fb60bab485e661aa5678587ef35aea74..2857fb2893f54f13e49f0ddde583954133ef593d 100644
|
| --- a/third_party/WebKit/Source/modules/webgl/WebGLProgram.cpp
|
| +++ b/third_party/WebKit/Source/modules/webgl/WebGLProgram.cpp
|
| @@ -47,27 +47,21 @@ WebGLProgram::WebGLProgram(WebGLRenderingContextBase* ctx)
|
| }
|
|
|
| WebGLProgram::~WebGLProgram() {
|
| - // These heap objects handle detachment on their own. Clear out
|
| - // the references to prevent deleteObjectImpl() from trying to do
|
| - // same, as we cannot safely access other heap objects from this
|
| - // destructor.
|
| - m_vertexShader = nullptr;
|
| - m_fragmentShader = nullptr;
|
| -
|
| - // See the comment in WebGLObject::detachAndDeleteObject().
|
| - detachAndDeleteObject();
|
| + runDestructor();
|
| }
|
|
|
| void WebGLProgram::deleteObjectImpl(gpu::gles2::GLES2Interface* gl) {
|
| gl->DeleteProgram(m_object);
|
| m_object = 0;
|
| - if (m_vertexShader) {
|
| - m_vertexShader->onDetached(gl);
|
| - m_vertexShader = nullptr;
|
| - }
|
| - if (m_fragmentShader) {
|
| - m_fragmentShader->onDetached(gl);
|
| - m_fragmentShader = nullptr;
|
| + if (!destructionInProgress()) {
|
| + if (m_vertexShader) {
|
| + m_vertexShader->onDetached(gl);
|
| + m_vertexShader = nullptr;
|
| + }
|
| + if (m_fragmentShader) {
|
| + m_fragmentShader->onDetached(gl);
|
| + m_fragmentShader = nullptr;
|
| + }
|
| }
|
| }
|
|
|
|
|