From b207f4e4a2c520f65d2e936430ce67d418b86f46 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 10 Jan 2019 17:08:31 +0100 Subject: [PATCH] Subdiv: Fix memory leak Was visible when mesh had n-gons. --- source/blender/blenkernel/intern/subdiv_foreach.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/intern/subdiv_foreach.c b/source/blender/blenkernel/intern/subdiv_foreach.c index 2cfcc137ba5..5c843561a4d 100644 --- a/source/blender/blenkernel/intern/subdiv_foreach.c +++ b/source/blender/blenkernel/intern/subdiv_foreach.c @@ -148,11 +148,15 @@ static void *subdiv_foreach_tls_alloc(SubdivForeachTaskContext *ctx) return tls; } -static void subdiv_foreach_tls_free(void *tls) +static void subdiv_foreach_tls_free(SubdivForeachTaskContext *ctx, void *tls) { - if (tls != NULL) { - MEM_freeN(tls); + if (tls == NULL) { + return; } + if (ctx->foreach_context != NULL) { + ctx->foreach_context->user_data_tls_free(tls); + } + MEM_freeN(tls); } /* ============================================================================= @@ -1972,7 +1976,7 @@ static void subdiv_foreach_single_thread_tasks(SubdivForeachTaskContext *ctx) subdiv_foreach_every_edge_vertices(ctx, tls); /* Run callbacks which are supposed to be run once per shared geometry. */ subdiv_foreach_single_geometry_vertices(ctx, tls); - subdiv_foreach_tls_free(tls); + subdiv_foreach_tls_free(ctx, tls); } static void subdiv_foreach_task(