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.
This commit is contained in:
Sergey Sharybin 2016-04-26 14:42:58 +02:00
parent 86b8c8a042
commit 680b135ec1
Notes: blender-bot 2023-02-14 07:58:29 +01:00
Referenced by issue #48176, open .blend file will be crash with blender 2.77a
2 changed files with 2 additions and 2 deletions

View File

@ -3523,8 +3523,6 @@ static void shrinkwrap_get_tarmat(bConstraint *con, bConstraintOb *cob, bConstra
free_bvhtree_from_mesh(&treeData);
target->release(target);
if (fail == true) {
/* Don't move the point */
zero_v3(co);

View File

@ -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;
}