diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-09-12 07:11:29 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-09-12 07:11:29 +0400 |
commit | 0ee9075e48b04fc1569d770dc156dee7c840fcd3 (patch) | |
tree | c792a3eb743e98276237e64b86e3e95b88541ac7 /source/blender/editors/object/object_bake.c | |
parent | 380a6174d9be73e5d0943ce480822016b16b277e (diff) |
fix memory leak when baking feedback loop detected.
Diffstat (limited to 'source/blender/editors/object/object_bake.c')
-rw-r--r-- | source/blender/editors/object/object_bake.c | 25 |
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; + } } } |