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>2017-12-22 14:50:06 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2018-01-09 16:12:17 +0300
commit72151f3e36b2e20418734c7e61aa09e0112cbaac (patch)
treea60014c82249835cae2e1c4655bc7964790bfbf4 /source/blender/blenkernel
parent83b0603061c2f767f46e352566b0f407e0f6b9ad (diff)
Subsurf: Avoid possible use of partially initialized edge hash
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 6f2b755f0cd..f58fa9cc8fd 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1490,13 +1490,16 @@ static void ccgDM_copyFinalLoopArray(DerivedMesh *dm, MLoop *mloop)
BLI_rw_mutex_lock(&ccgdm->loops_cache_rwlock, THREAD_LOCK_WRITE);
if (!ccgdm->ehash) {
MEdge *medge;
+ EdgeHash *ehash;
- ccgdm->ehash = BLI_edgehash_new_ex(__func__, ccgdm->dm.numEdgeData);
+ ehash = BLI_edgehash_new_ex(__func__, ccgdm->dm.numEdgeData);
medge = ccgdm->dm.getEdgeArray((DerivedMesh *)ccgdm);
for (i = 0; i < ccgdm->dm.numEdgeData; i++) {
- BLI_edgehash_insert(ccgdm->ehash, medge[i].v1, medge[i].v2, SET_INT_IN_POINTER(i));
+ BLI_edgehash_insert(ehash, medge[i].v1, medge[i].v2, SET_INT_IN_POINTER(i));
}
+
+ atomic_cas_ptr((void**)&ccgdm->ehash, ccgdm->ehash, ehash);
}
BLI_rw_mutex_unlock(&ccgdm->loops_cache_rwlock);
}