diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-04-26 17:58:28 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-04-26 17:58:28 +0300 |
commit | c9d4a0930b4206d736401ca6308ebfcb248d1c33 (patch) | |
tree | 708fbfd1717120638de9de0ef5ceb773e6589a03 /source/blender/blenkernel | |
parent | dc27d31a2100c3272d0dbf293b24131eacaab962 (diff) | |
parent | be60e9b8c57223d102bb8b34f1dddc8c454b0ded (diff) |
Merge branch 'master' into 28
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index fea292c1350..b70eb2b503a 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -131,6 +131,7 @@ #endif #include "CCGSubSurf.h" +#include "atomic_ops.h" #include "GPU_lamp.h" @@ -323,19 +324,24 @@ void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_sr /* free data derived from mesh, called when mesh changes or is freed */ void BKE_object_free_derived_caches(Object *ob) { - /* also serves as signal to remake texspace */ + /* Also serves as signal to remake texspace. + * + * NOTE: This function can be called from threads on different objects + * sharing same data datablock. So we need to ensure atomic nature of + * data modification here. + */ if (ob->type == OB_MESH) { Mesh *me = ob->data; if (me && me->bb) { - me->bb->flag |= BOUNDBOX_DIRTY; + atomic_fetch_and_or_uint32((uint*)&me->bb->flag, BOUNDBOX_DIRTY); } } else if (ELEM(ob->type, OB_SURF, OB_CURVE, OB_FONT)) { Curve *cu = ob->data; if (cu && cu->bb) { - cu->bb->flag |= BOUNDBOX_DIRTY; + atomic_fetch_and_or_uint32((uint*)&cu->bb->flag, BOUNDBOX_DIRTY); } } |