Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-09-12 07:11:29 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-09-12 07:11:29 +0400
commit0ee9075e48b04fc1569d770dc156dee7c840fcd3 (patch)
treec792a3eb743e98276237e64b86e3e95b88541ac7 /source
parent380a6174d9be73e5d0943ce480822016b16b277e (diff)
fix memory leak when baking feedback loop detected.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/object/object_bake.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c
index 59cc782f3eb..c0dd911946b 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -1347,6 +1347,8 @@ static void init_bake_internal(BakeRender *bkr, bContext *C)
static void finish_bake_internal(BakeRender *bkr)
{
+ Image *ima;
+
RE_Database_Free(bkr->re);
/* restore raytrace and AO */
@@ -1358,26 +1360,27 @@ static void finish_bake_internal(BakeRender *bkr)
if (bkr->prev_r_raytrace == 0)
bkr->scene->r.mode &= ~R_RAYTRACE;
- if (bkr->result == BAKE_RESULT_OK) {
- Image *ima;
- /* force OpenGL reload and mipmap recalc */
- for (ima = G.main->image.first; ima; ima = ima->id.next) {
+
+ /* force OpenGL reload and mipmap recalc */
+ for (ima = G.main->image.first; ima; ima = ima->id.next) {
+ ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL);
+
+ if (bkr->result == BAKE_RESULT_OK) {
if (ima->ok == IMA_OK_LOADED) {
- ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL);
if (ibuf) {
if (ibuf->userflags & IB_BITMAPDIRTY) {
GPU_free_image(ima);
imb_freemipmapImBuf(ibuf);
}
-
- /* freed when baking is done, but if its canceled we need to free here */
- if (ibuf->userdata) {
- MEM_freeN(ibuf->userdata);
- ibuf->userdata = NULL;
- }
}
}
}
+
+ /* freed when baking is done, but if its canceled we need to free here */
+ if (ibuf->userdata) {
+ MEM_freeN(ibuf->userdata);
+ ibuf->userdata = NULL;
+ }
}
}