[Bf-blender-cvs] [051f0a0b15] clay-engine: _free() functions should not clear the pointer itself

Dalai Felinto noreply at git.blender.org
Wed Jan 11 15:55:01 CET 2017


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 ********************/




More information about the Bf-blender-cvs mailing list