diff options
author | Jeroen Bakker <jeroen@blender.org> | 2021-03-24 13:56:58 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2021-03-24 13:57:04 +0300 |
commit | 26b45448abf05dc709678cb821201b0721a51d76 (patch) | |
tree | 9acb173b1bf0deae7a43977543c64fbeb24ea888 /source/blender/compositor/intern/COM_WorkScheduler.cc | |
parent | 715c7462969e6075859f44a64bb4eb68d056345b (diff) |
Fix: Memory Leak When Using Compositor.
When using the compositor inlined static vectors could allocate
memory. This memory wasn't freed. This patch would make them inline
again.
Diffstat (limited to 'source/blender/compositor/intern/COM_WorkScheduler.cc')
-rw-r--r-- | source/blender/compositor/intern/COM_WorkScheduler.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/source/blender/compositor/intern/COM_WorkScheduler.cc b/source/blender/compositor/intern/COM_WorkScheduler.cc index 2bc3ff936b1..56956b9d097 100644 --- a/source/blender/compositor/intern/COM_WorkScheduler.cc +++ b/source/blender/compositor/intern/COM_WorkScheduler.cc @@ -284,12 +284,13 @@ static void opencl_deinitialize() { /* Deinitialize OpenCL GPU's. */ if (g_work_scheduler.opencl.initialized) { - Device *device; while (!g_work_scheduler.opencl.devices.is_empty()) { - device = g_work_scheduler.opencl.devices.pop_last(); + Device *device = g_work_scheduler.opencl.devices.pop_last(); device->deinitialize(); delete device; } + g_work_scheduler.opencl.devices.clear_and_make_inline(); + if (g_work_scheduler.opencl.program) { clReleaseProgram(g_work_scheduler.opencl.program); g_work_scheduler.opencl.program = nullptr; @@ -397,12 +398,13 @@ static void threading_model_queue_deinitialize() { /* deinitialize CPU threads */ if (g_work_scheduler.queue.initialized) { - Device *device; while (!g_work_scheduler.queue.devices.is_empty()) { - device = g_work_scheduler.queue.devices.pop_last(); + Device *device = g_work_scheduler.queue.devices.pop_last(); device->deinitialize(); delete device; } + g_work_scheduler.queue.devices.clear_and_make_inline(); + BLI_thread_local_delete(g_thread_device); g_work_scheduler.queue.initialized = false; } |