Title: [288106] trunk/Source/ThirdParty/ANGLE
Revision
288106
Author
[email protected]
Date
2022-01-17 17:39:05 -0800 (Mon, 17 Jan 2022)

Log Message

REGRESSION (r249823): gl::Context::onProgramLink() leaks gl::Framebuffer object due early return when an error occurs in ANGLE_TRY() macro
<https://webkit.org/b/235284>
<rdar://problem/87656747>

Reviewed by Darin Adler.

* src/libANGLE/Context.cpp:
(gl::Context::setDefaultFramebuffer):
- Use std::unique_ptr<> to store gl::Framebuffer so the object
  is released on early return.
* src/libANGLE/Surface.cpp:
(egl::Surface::createDefaultFramebuffer):
- Update to return std::unique_ptr<gl::Framebuffer>.
* src/libANGLE/Surface.h:
(egl::Surface::createDefaultFramebuffer):
- Update declaration to return std::unique_ptr<gl::Framebuffer>.
(egl::Surface::createDefaultFramebuffer): Delete.
- Remove the second, protected method that is currently
  unimplemented.

Modified Paths

Diff

Modified: trunk/Source/ThirdParty/ANGLE/ChangeLog (288105 => 288106)


--- trunk/Source/ThirdParty/ANGLE/ChangeLog	2022-01-18 00:56:11 UTC (rev 288105)
+++ trunk/Source/ThirdParty/ANGLE/ChangeLog	2022-01-18 01:39:05 UTC (rev 288106)
@@ -1,5 +1,27 @@
 2022-01-17  David Kilzer  <[email protected]>
 
+        REGRESSION (r249823): gl::Context::onProgramLink() leaks gl::Framebuffer object due early return when an error occurs in ANGLE_TRY() macro
+        <https://webkit.org/b/235284>
+        <rdar://problem/87656747>
+
+        Reviewed by Darin Adler.
+
+        * src/libANGLE/Context.cpp:
+        (gl::Context::setDefaultFramebuffer):
+        - Use std::unique_ptr<> to store gl::Framebuffer so the object
+          is released on early return.
+        * src/libANGLE/Surface.cpp:
+        (egl::Surface::createDefaultFramebuffer):
+        - Update to return std::unique_ptr<gl::Framebuffer>.
+        * src/libANGLE/Surface.h:
+        (egl::Surface::createDefaultFramebuffer):
+        - Update declaration to return std::unique_ptr<gl::Framebuffer>.
+        (egl::Surface::createDefaultFramebuffer): Delete.
+        - Remove the second, protected method that is currently
+          unimplemented.
+
+2022-01-17  David Kilzer  <[email protected]>
+
         REGRESSION (r286603): rx::ProgramMtl::getSpecializedShader() leaks MTLFunctionConstantValues object due early return when an error occurs in ANGLE_TRY() macro
         <https://webkit.org/b/235281>
         <rdar://problem/87656387>

Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp (288105 => 288106)


--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp	2022-01-18 00:56:11 UTC (rev 288105)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/Context.cpp	2022-01-18 01:39:05 UTC (rev 288106)
@@ -9099,7 +9099,7 @@
     ASSERT(mCurrentDrawSurface == nullptr);
     ASSERT(mCurrentReadSurface == nullptr);
 
-    Framebuffer *newDefaultFramebuffer = nullptr;
+    std::unique_ptr<gl::Framebuffer> newDefaultFramebuffer;
 
     mCurrentDrawSurface = drawSurface;
     mCurrentReadSurface = readSurface;
@@ -9111,7 +9111,7 @@
     }
     else
     {
-        newDefaultFramebuffer = new Framebuffer(this, mImplementation.get(), readSurface);
+        newDefaultFramebuffer = std::make_unique<gl::Framebuffer>(this, mImplementation.get(), readSurface);
     }
     ASSERT(newDefaultFramebuffer);
 
@@ -9122,14 +9122,14 @@
 
     // Update default framebuffer, the binding of the previous default
     // framebuffer (or lack of) will have a nullptr.
-    mState.mFramebufferManager->setDefaultFramebuffer(newDefaultFramebuffer);
+    mState.mFramebufferManager->setDefaultFramebuffer(newDefaultFramebuffer.release());
     if (mState.getDrawFramebuffer() == nullptr)
     {
-        bindDrawFramebuffer(newDefaultFramebuffer->id());
+        bindDrawFramebuffer(mState.mFramebufferManager->getDefaultFramebuffer()->id());
     }
     if (mState.getReadFramebuffer() == nullptr)
     {
-        bindReadFramebuffer(newDefaultFramebuffer->id());
+        bindReadFramebuffer(mState.mFramebufferManager->getDefaultFramebuffer()->id());
     }
 
     return egl::NoError();

Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/Surface.cpp (288105 => 288106)


--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/Surface.cpp	2022-01-18 00:56:11 UTC (rev 288105)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/Surface.cpp	2022-01-18 01:39:05 UTC (rev 288106)
@@ -618,10 +618,10 @@
     return mImplementation->getBufferAge(context, age);
 }
 
-gl::Framebuffer *Surface::createDefaultFramebuffer(const gl::Context *context,
-                                                   egl::Surface *readSurface)
+std::unique_ptr<gl::Framebuffer> Surface::createDefaultFramebuffer(const gl::Context *context,
+                                                                   egl::Surface *readSurface)
 {
-    return new gl::Framebuffer(context, this, readSurface);
+    return std::make_unique<gl::Framebuffer>(context, this, readSurface);
 }
 
 gl::InitState Surface::initState(const gl::ImageIndex & /*imageIndex*/) const

Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/Surface.h (288105 => 288106)


--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/Surface.h	2022-01-18 00:56:11 UTC (rev 288105)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/Surface.h	2022-01-18 01:39:05 UTC (rev 288106)
@@ -104,8 +104,8 @@
     void setFixedWidth(EGLint width);
     void setFixedHeight(EGLint height);
 
-    gl::Framebuffer *createDefaultFramebuffer(const gl::Context *context,
-                                              egl::Surface *readSurface);
+    std::unique_ptr<gl::Framebuffer> createDefaultFramebuffer(const gl::Context *context,
+                                                              egl::Surface *readSurface);
 
     const Config *getConfig() const;
 
@@ -215,8 +215,6 @@
     ~Surface() override;
     rx::FramebufferAttachmentObjectImpl *getAttachmentImpl() const override;
 
-    gl::Framebuffer *createDefaultFramebuffer(const Display *display);
-
     // ANGLE-only method, used internally
     friend class gl::Texture;
     Error releaseTexImageFromTexture(const gl::Context *context);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to