opengl add-on: Fix potential memory leaks. CID 2777
* Free GL FrameBuffer which could of resulted in memory leaks * Add better malloc/calloc failure tracing.
This commit is contained in:
@@ -285,22 +285,33 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, ulong options,
|
|||||||
// create core framebuffer
|
// create core framebuffer
|
||||||
fFrameBuffer = (struct msr_framebuffer*)calloc(1,
|
fFrameBuffer = (struct msr_framebuffer*)calloc(1,
|
||||||
sizeof(*fFrameBuffer));
|
sizeof(*fFrameBuffer));
|
||||||
|
if (fFrameBuffer == NULL) {
|
||||||
|
ERROR("%s: Unable to calloc GL FrameBuffer!\n", __func__);
|
||||||
|
_mesa_destroy_visual(fVisual);
|
||||||
|
return;
|
||||||
|
}
|
||||||
_mesa_initialize_window_framebuffer(&fFrameBuffer->base, fVisual);
|
_mesa_initialize_window_framebuffer(&fFrameBuffer->base, fVisual);
|
||||||
|
|
||||||
// Setup front render buffer
|
// Setup front render buffer
|
||||||
fFrontRenderBuffer = _NewRenderBuffer(true);
|
fFrontRenderBuffer = _NewRenderBuffer(true);
|
||||||
if (fFrontRenderBuffer == NULL) {
|
if (fFrontRenderBuffer == NULL) {
|
||||||
|
ERROR("%s: FrontRenderBuffer is requested but unallocated!\n",
|
||||||
|
__func__);
|
||||||
_mesa_destroy_visual(fVisual);
|
_mesa_destroy_visual(fVisual);
|
||||||
|
free(fFrameBuffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_mesa_add_renderbuffer(&fFrameBuffer->base, BUFFER_FRONT_LEFT,
|
_mesa_add_renderbuffer(&fFrameBuffer->base, BUFFER_FRONT_LEFT,
|
||||||
&fFrontRenderBuffer->base);
|
&fFrontRenderBuffer->base);
|
||||||
|
|
||||||
// Setup back render buffer (if needed)
|
// Setup back render buffer (if requested)
|
||||||
if (fVisual->doubleBufferMode) {
|
if (fVisual->doubleBufferMode) {
|
||||||
fBackRenderBuffer = _NewRenderBuffer(false);
|
fBackRenderBuffer = _NewRenderBuffer(false);
|
||||||
if (fBackRenderBuffer == NULL) {
|
if (fBackRenderBuffer == NULL) {
|
||||||
|
ERROR("%s: BackRenderBuffer is requested but unallocated!\n",
|
||||||
|
__func__);
|
||||||
_mesa_destroy_visual(fVisual);
|
_mesa_destroy_visual(fVisual);
|
||||||
|
free(fFrameBuffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_mesa_add_renderbuffer(&fFrameBuffer->base, BUFFER_BACK_LEFT,
|
_mesa_add_renderbuffer(&fFrameBuffer->base, BUFFER_BACK_LEFT,
|
||||||
@@ -346,6 +357,7 @@ MesaSoftwareRenderer::~MesaSoftwareRenderer()
|
|||||||
_mesa_destroy_context(fContext);
|
_mesa_destroy_context(fContext);
|
||||||
|
|
||||||
free(fInfo);
|
free(fInfo);
|
||||||
|
free(fFrameBuffer);
|
||||||
|
|
||||||
delete fBitmap;
|
delete fBitmap;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user