Chromium Code Reviews| 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()) { |
|
Kai Ninomiya
2016/12/02 18:51:28
Does this depend on the assumption that there is o
Ken Russell (switch to Gerrit)
2016/12/02 20:38:49
No, no such assumption and no such leak. When the
|
| + if (m_vertexShader) { |
| + m_vertexShader->onDetached(gl); |
| + m_vertexShader = nullptr; |
| + } |
| + if (m_fragmentShader) { |
| + m_fragmentShader->onDetached(gl); |
| + m_fragmentShader = nullptr; |
| + } |
| } |
| } |