[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