[Bf-blender-cvs] [26e91f4f1e6] lanpr-under-gp: LANPR: Thread monitoring memory leak fixed.

YimingWu noreply at git.blender.org
Wed Jun 10 15:05:00 CEST 2020


Commit: 26e91f4f1e6905dde1fda201004dd4f27bf5279a
Author: YimingWu
Date:   Wed Jun 10 21:04:55 2020 +0800
Branches: lanpr-under-gp
https://developer.blender.org/rB26e91f4f1e6905dde1fda201004dd4f27bf5279a

LANPR: Thread monitoring memory leak fixed.

===================================================================

M	source/blender/editors/include/ED_lanpr.h
M	source/blender/editors/lanpr/lanpr_cpu.c
M	source/blender/editors/util/ed_util.c

===================================================================

diff --git a/source/blender/editors/include/ED_lanpr.h b/source/blender/editors/include/ED_lanpr.h
index 0b014f5fa51..d5cd62583ae 100644
--- a/source/blender/editors/include/ED_lanpr.h
+++ b/source/blender/editors/include/ED_lanpr.h
@@ -524,6 +524,7 @@ struct LANPR_RenderBuffer;
 void ED_lanpr_init_locks(void);
 struct LANPR_RenderBuffer *ED_lanpr_create_render_buffer(struct Scene *s);
 void ED_lanpr_destroy_render_data(void);
+void ED_lanpr_destroy_render_data_external(void);
 
 int ED_lanpr_object_collection_usage_check(struct Collection *c, struct Object *o);
 
diff --git a/source/blender/editors/lanpr/lanpr_cpu.c b/source/blender/editors/lanpr/lanpr_cpu.c
index a20dfefd60a..9f283181159 100644
--- a/source/blender/editors/lanpr/lanpr_cpu.c
+++ b/source/blender/editors/lanpr/lanpr_cpu.c
@@ -2546,9 +2546,7 @@ static void lanpr_destroy_render_data(void)
 
 void ED_lanpr_destroy_render_data(void)
 {
-  while (lanpr_share.init_complete && ED_lanpr_calculation_flag_check(LANPR_RENDER_RUNNING)) {
-    /* Wait to finish, XXX: should cancel here */
-  }
+
   lanpr_destroy_render_data();
   LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared;
   if (rb) {
@@ -2557,6 +2555,28 @@ void ED_lanpr_destroy_render_data(void)
   }
 }
 
+void ED_lanpr_destroy_render_data_external(void)
+{
+  if (!lanpr_share.init_complete) {
+    return;
+  }
+  while (ED_lanpr_calculation_flag_check(LANPR_RENDER_RUNNING)) {
+    /* Wait to finish, XXX: should cancel here */
+  }
+
+  BLI_spin_lock(&lanpr_share.lock_render_status);
+  TaskPool *tp_read = lanpr_share.background_render_task;
+  BLI_spin_unlock(&lanpr_share.lock_render_status);
+
+  if (tp_read) {
+    BLI_task_pool_work_and_wait(lanpr_share.background_render_task);
+    BLI_task_pool_free(lanpr_share.background_render_task);
+    lanpr_share.background_render_task = NULL;
+  }
+
+  ED_lanpr_destroy_render_data();
+}
+
 LANPR_RenderBuffer *ED_lanpr_create_render_buffer(Scene *s)
 {
   /* Re-init render_buffer_shared */
@@ -3815,6 +3835,7 @@ void ED_lanpr_compute_feature_lines_background(Depsgraph *dg, const int intersec
   }
 
   if (tp_read) {
+    BLI_task_pool_work_and_wait(lanpr_share.background_render_task);
     BLI_task_pool_free(lanpr_share.background_render_task);
     lanpr_share.background_render_task = NULL;
   }
@@ -3824,7 +3845,7 @@ void ED_lanpr_compute_feature_lines_background(Depsgraph *dg, const int intersec
   flw->dg = dg;
   flw->intersection_only = intersection_only;
 
-  TaskPool *tp = BLI_task_pool_create_background(flw, TASK_PRIORITY_HIGH);
+  TaskPool *tp = BLI_task_pool_create_background(0, TASK_PRIORITY_HIGH);
   BLI_spin_lock(&lanpr_share.lock_render_status);
   lanpr_share.background_render_task = tp;
   BLI_spin_unlock(&lanpr_share.lock_render_status);
diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c
index bf89f42d010..983e81c869f 100644
--- a/source/blender/editors/util/ed_util.c
+++ b/source/blender/editors/util/ed_util.c
@@ -236,7 +236,7 @@ void ED_editors_exit(Main *bmain, bool do_undo_system)
 
   /* LANPR data*/
 #ifdef WITH_LANPR
-  ED_lanpr_destroy_render_data();
+  ED_lanpr_destroy_render_data_external();
 #endif
 }



More information about the Bf-blender-cvs mailing list