diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2014-05-22 00:35:08 +0400 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2014-05-22 00:37:50 +0400 |
commit | a217db0d6373a4050658049a9ded84f34b33f952 (patch) | |
tree | 18a2c2befaaf38f0d4ab40e1a8b96a45e71bf067 /source/blender/bmesh/intern/bmesh_core.c | |
parent | 8d297394ba51246f2db0d503df7f4cae19ca6e92 (diff) |
Fix T40297: Crash while ripping an edge when autosmooth is activated.
Turned out there was still quite a few cases were indices were set dirty,
but elem_index_dirty was not tagged accordingly (mostly for BM_LOOP,
but a few others as well). So probably this crash was not the only one
hidden here.
Hopefully all possible cases were catched this time!
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_core.c')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_core.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index 1f81b59badc..6a13a99999c 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -198,7 +198,13 @@ static BMLoop *bm_loop_create(BMesh *bm, BMVert *v, BMEdge *e, BMFace *f, /* --- assign all members --- */ l->head.data = NULL; - BM_elem_index_set(l, 0); /* set_loop */ + +#ifdef USE_DEBUG_INDEX_MEMCHECK + DEBUG_MEMCHECK_INDEX_INVALIDATE(l) +#else + BM_elem_index_set(l, -1); /* set_ok_invalid */ +#endif + l->head.hflag = 0; l->head.htype = BM_LOOP; l->head.api_flag = 0; @@ -1927,7 +1933,7 @@ BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e) BLI_mempool_free(bm->fpool, f2); bm->totface--; /* account for both above */ - bm->elem_index_dirty |= BM_EDGE | BM_FACE; + bm->elem_index_dirty |= BM_EDGE | BM_LOOP | BM_FACE; BM_CHECK_ELEMENT(f1); |