[Bf-blender-cvs] [7f1cbfb] soc-2016-cycles_denoising: Cycles: Fix a memory leak when cancelling a denoised render
Lukas Stockner
noreply at git.blender.org
Sat Aug 6 05:41:01 CEST 2016
Commit: 7f1cbfb9fb6dcb4ab91a74b16306a1362f8286aa
Author: Lukas Stockner
Date: Wed Jul 27 22:36:06 2016 +0200
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB7f1cbfb9fb6dcb4ab91a74b16306a1362f8286aa
Cycles: Fix a memory leak when cancelling a denoised render
===================================================================
M intern/cycles/render/session.cpp
M intern/cycles/render/tile.cpp
M intern/cycles/render/tile.h
===================================================================
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index f266815..ec9dcec 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -119,6 +119,7 @@ Session::~Session()
/* clean up */
foreach(RenderBuffers *buffers, tile_buffers)
delete buffers;
+ tile_manager.free_device();
delete buffers;
delete display;
@@ -493,8 +494,7 @@ void Session::release_tile(RenderTile& rtile)
write_render_tile_cb(rtile);
if(delete_tile) {
delete rtile.buffers;
- /* TODO(lukas): Set buffers in tile_manager.state.tiles[] to zero.
- * Shoudn't matter in theory since the tile won't be used again, but it's more error-proof. */
+ tile_manager.state.tiles[rtile.tile_index].buffers = NULL;
}
}
}
@@ -1129,6 +1129,7 @@ void Session::device_free()
foreach(RenderBuffers *buffers, tile_buffers)
delete buffers;
+ tile_manager.free_device();
tile_buffers.clear();
diff --git a/intern/cycles/render/tile.cpp b/intern/cycles/render/tile.cpp
index 0e298a5..18e8e5b 100644
--- a/intern/cycles/render/tile.cpp
+++ b/intern/cycles/render/tile.cpp
@@ -112,6 +112,16 @@ TileManager::~TileManager()
{
}
+void TileManager::free_device()
+{
+ if(schedule_denoising) {
+ for(int i = 0; i < state.tiles.size(); i++) {
+ delete state.tiles[i].buffers;
+ state.tiles[i].buffers = NULL;
+ }
+ }
+}
+
void TileManager::reset(BufferParams& params_, int num_samples_)
{
params = params_;
diff --git a/intern/cycles/render/tile.h b/intern/cycles/render/tile.h
index 6d9b63b..7c0c0a6 100644
--- a/intern/cycles/render/tile.h
+++ b/intern/cycles/render/tile.h
@@ -88,6 +88,7 @@ public:
bool preserve_tile_device, bool background, TileOrder tile_order, int num_devices = 1, bool only_denoise = false);
~TileManager();
+ void free_device();
void reset(BufferParams& params, int num_samples);
void set_samples(int num_samples);
bool next();
More information about the Bf-blender-cvs
mailing list