Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-04-26 15:42:58 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-04-26 15:44:49 +0300
commit680b135ec1cf220c7ebd579b88bc5481fc379fc3 (patch)
tree9ab234bf7eb4422fa823b89209ef60fd7d21965f /source/blender/blenkernel/intern/subsurf_ccg.c
parent86b8c8a042ff118d4af461389ad081b71a9b12a8 (diff)
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.
Diffstat (limited to 'source/blender/blenkernel/intern/subsurf_ccg.c')
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c2
1 files changed, 2 insertions, 0 deletions
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;
}