[Bf-blender-cvs] [231bfe46a45] lanpr-under-gp: LANPR: Fix undo memory conflict in threaded calculations
YimingWu
noreply at git.blender.org
Wed Jun 10 13:49:59 CEST 2020
Commit: 231bfe46a45d90d570c712de37729b49d2f11fb8
Author: YimingWu
Date: Wed Jun 10 19:49:53 2020 +0800
Branches: lanpr-under-gp
https://developer.blender.org/rB231bfe46a45d90d570c712de37729b49d2f11fb8
LANPR: Fix undo memory conflict in threaded calculations
===================================================================
M source/blender/editors/lanpr/lanpr_cpu.c
===================================================================
diff --git a/source/blender/editors/lanpr/lanpr_cpu.c b/source/blender/editors/lanpr/lanpr_cpu.c
index b3173d8c4a0..a20dfefd60a 100644
--- a/source/blender/editors/lanpr/lanpr_cpu.c
+++ b/source/blender/editors/lanpr/lanpr_cpu.c
@@ -2546,10 +2546,14 @@ 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) {
MEM_freeN(rb);
+ lanpr_share.render_buffer_shared = NULL;
}
}
@@ -3703,6 +3707,9 @@ int ED_lanpr_compute_feature_lines_internal(Depsgraph *depsgraph, const int inte
rb = ED_lanpr_create_render_buffer(s);
+ /* Has to be set after render buffer creation, to avoid locking from editor undo. */
+ ED_lanpr_calculation_set_flag(LANPR_RENDER_RUNNING);
+
lanpr_share.render_buffer_shared = rb;
rb->w = s->r.xsch;
@@ -3812,9 +3819,7 @@ void ED_lanpr_compute_feature_lines_background(Depsgraph *dg, const int intersec
lanpr_share.background_render_task = NULL;
}
- ED_lanpr_calculation_set_flag(LANPR_RENDER_RUNNING);
-
- LANPR_FeatureLineWorker *flw = MEM_callocN(sizeof(LANPR_FeatureLineWorker), "Task Pool");
+ LANPR_FeatureLineWorker *flw = MEM_callocN(sizeof(LANPR_FeatureLineWorker), "LANPR Worker");
flw->dg = dg;
flw->intersection_only = intersection_only;
@@ -4267,8 +4272,6 @@ static void lanpr_update_gp_strokes_actual(Scene *scene, Depsgraph *dg)
{
int frame = scene->r.cfra;
- ED_lanpr_compute_feature_lines_internal(dg, 0);
-
ED_lanpr_chain_clear_picked_flag(lanpr_share.render_buffer_shared);
lanpr_update_gp_strokes_recursive(dg, scene->master_collection, frame, NULL, NULL);
@@ -4282,8 +4285,12 @@ static int lanpr_update_gp_strokes_exec(bContext *C, wmOperator *UNUSED(op))
Scene *scene = CTX_data_scene(C);
Depsgraph *dg = CTX_data_depsgraph_pointer(C);
+ BLI_spin_lock(&lanpr_share.lock_loader);
+ ED_lanpr_compute_feature_lines_internal(dg, 0);
lanpr_update_gp_strokes_actual(scene, dg);
+ ED_lanpr_calculation_set_flag(LANPR_RENDER_FINISHED);
+
WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED | ND_SPACE_PROPERTIES, NULL);
return OPERATOR_FINISHED;
More information about the Bf-blender-cvs
mailing list