Commit: 051f0a0b15717ba473f4eb4ce36c4b7cbfa8cd5e
Author: Dalai Felinto
Date:   Wed Jan 11 15:54:56 2017 +0100
Branches: clay-engine
https://developer.blender.org/rB051f0a0b15717ba473f4eb4ce36c4b7cbfa8cd5e

_free() functions should not clear the pointer itself

===================================================================

M       source/blender/draw/intern/draw_manager.c
M       source/blender/editors/space_view3d/space_view3d.c
M       source/blender/gpu/intern/gpu_viewport.c

===================================================================

diff --git a/source/blender/draw/intern/draw_manager.c 
b/source/blender/draw/intern/draw_manager.c
index b0f0cd866b..902916c6b5 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -431,7 +431,6 @@ void DRW_pass_free(DRWPass *pass)
                DRW_batch_free(batch);
        }
        BLI_freelistN(&pass->batches);
-       MEM_freeN(pass);
 }
 
 /* ****************************************** DRAW 
******************************************/
diff --git a/source/blender/editors/space_view3d/space_view3d.c 
b/source/blender/editors/space_view3d/space_view3d.c
index 90fa54c7a1..14842ab287 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -586,6 +586,7 @@ static void view3d_main_region_exit(wmWindowManager *wm, 
ARegion *ar)
 
        if (rv3d->viewport) {
                GPU_viewport_free(rv3d->viewport);
+               MEM_freeN(rv3d->viewport);
                rv3d->viewport = NULL;
        }
 }
@@ -747,6 +748,7 @@ static void view3d_main_region_free(ARegion *ar)
                }
                if (rv3d->viewport) {
                        GPU_viewport_free(rv3d->viewport);
+                       MEM_freeN(rv3d->viewport);
                }
 
                MEM_freeN(rv3d);
diff --git a/source/blender/gpu/intern/gpu_viewport.c 
b/source/blender/gpu/intern/gpu_viewport.c
index 1f09552149..8486288907 100644
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -89,47 +89,55 @@ void GPU_viewport_bind(GPUViewport *viewport, const rcti 
*rect)
        /* add one pixel because of scissor test */
        int rect_w = BLI_rcti_size_x(rect) + 1, rect_h = BLI_rcti_size_y(rect) 
+ 1;
 
-       if (viewport->fbl->default_fb)
-               if (rect_w != viewport->size[0] || rect_h != viewport->size[1])
+       if (viewport->fbl->default_fb) {
+               if (rect_w != viewport->size[0] || rect_h != viewport->size[1]) 
{
                        GPU_viewport_buffers_free(viewport);
+               }
+       }
 
        if (!viewport->fbl->default_fb) {
+               bool ok = true;
                viewport->size[0] = rect_w;
                viewport->size[1] = rect_h;
 
                viewport->fbl->default_fb = GPU_framebuffer_create();
                if (!viewport->fbl->default_fb) {
-                       GPU_viewport_free(viewport);
-                       return;
+                       ok = false;
+                       goto cleanup;
                }
 
                /* Color */
                /* No multi samples for now */
                viewport->txl->color = GPU_texture_create_2D(rect_w, rect_h, 
NULL, NULL);
                if (!viewport->txl->color) {
-                       GPU_viewport_free(viewport);
-                       return;
+                       ok = false;
+                       goto cleanup;
                }
 
                if (!GPU_framebuffer_texture_attach(viewport->fbl->default_fb, 
viewport->txl->color, 0)) {
-                       GPU_viewport_free(viewport);
-                       return;
+                       ok = false;
+                       goto cleanup;
                }
 
                /* Depth */
                viewport->txl->depth = GPU_texture_create_depth(rect_w, rect_h, 
NULL);
                if (!viewport->txl->depth) {
-                       GPU_viewport_free(viewport);
-                       return;
+                       ok = false;
+                       goto cleanup;
                }
-
-               if (!GPU_framebuffer_texture_attach(viewport->fbl->default_fb, 
viewport->txl->depth, 0)) {
-                       GPU_viewport_free(viewport);
-                       return;
+               else if 
(!GPU_framebuffer_texture_attach(viewport->fbl->default_fb, 
viewport->txl->depth, 0)) {
+                       ok = false;
+                       goto cleanup;
+               }
+               else if 
(!GPU_framebuffer_check_valid(viewport->fbl->default_fb, NULL)) {
+                       ok = false;
+                       goto cleanup;
                }
 
-               if (!GPU_framebuffer_check_valid(viewport->fbl->default_fb, 
NULL)) {
+cleanup:
+               if (!ok) {
                        GPU_viewport_free(viewport);
+                       MEM_freeN(viewport);
                        return;
                }
 
@@ -220,7 +228,7 @@ static void GPU_viewport_passes_free(GPUViewport *viewport)
                struct DRWPass *pass = psl->passes[i];
                if (pass) {
                        DRW_pass_free(pass);
-                       psl->passes[i] = NULL;
+                       MEM_freeN(pass);
                }
        }
 }
@@ -234,8 +242,6 @@ void GPU_viewport_free(GPUViewport *viewport)
        MEM_freeN(viewport->fbl);
        MEM_freeN(viewport->txl);
        MEM_freeN(viewport->psl);
-
-       MEM_freeN(viewport);
 }
 
 /****************** debug ********************/

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to