From 680b135ec1cf220c7ebd579b88bc5481fc379fc3 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 26 Apr 2016 14:42:58 +0200 Subject: Fix T48176: Shrinkwrap crashes when multiple objects uses same target Annoying bug caused by temp nature of looptri layer for CCGDM. Fixed in a similar to CCG loops by using lock when allocating and filling looptri arrays. Real fix would be to make sure this array is allocated on object evaluation using DAG's eval_flag, but that's more involved change which we'll work on later. --- source/blender/blenkernel/intern/subsurf_ccg.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source/blender/blenkernel/intern/subsurf_ccg.c') diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index daa667fba71..a84b8352417 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -4365,6 +4365,7 @@ static void ccgDM_recalcLoopTri(DerivedMesh *UNUSED(dm)) static const MLoopTri *ccgDM_getLoopTriArray(DerivedMesh *dm) { + BLI_rw_mutex_lock(&loops_cache_rwlock, THREAD_LOCK_WRITE); if (dm->looptris.array) { BLI_assert(poly_to_tri_count(dm->numPolyData, dm->numLoopData) == dm->looptris.num); } @@ -4395,6 +4396,7 @@ static const MLoopTri *ccgDM_getLoopTriArray(DerivedMesh *dm) lt->poly = poly_index; } } + BLI_rw_mutex_unlock(&loops_cache_rwlock); return dm->looptris.array; } -- cgit v1.2.3