diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-03-21 16:44:38 +0400 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2014-03-21 16:50:20 +0400 |
commit | c626462c0fe1257c07948b49db1a41526682ba3f (patch) | |
tree | 564141e615224f6f1e9d92873dd3b5ce3e9720e2 /source/blender/blenkernel/intern/mask.c | |
parent | 7148c97796723d9f074bdf5acd244be02c54b814 (diff) |
Fix T39209: Localizing materials could cause heisenbug with concurrent
depsgraph updates.
Material datablocks were localized by first making a regular datablock
copy, which always gets inserted into the bmain list, and then removing
it again from bmain.
Problem is that this localization happens in preview threads, which can
run while the depsgraph is also updating GPU materials. In case the
copying of materials takes any amount of time, this can cause the
depsgraph call to material_changed to use an invalid, localized material
and access invalid GPUMaterial lists which have already been freed for
the actual material.
Solution is to not add localized datablocks to the bmain lists in the
first place. bmain should be totally immutable during preview or render
threads.
Diffstat (limited to 'source/blender/blenkernel/intern/mask.c')
-rw-r--r-- | source/blender/blenkernel/intern/mask.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c index 9b7886ece97..d08b7316e61 100644 --- a/source/blender/blenkernel/intern/mask.c +++ b/source/blender/blenkernel/intern/mask.c @@ -734,6 +734,7 @@ Mask *BKE_mask_new(Main *bmain, const char *name) return mask; } +/* TODO(sergey): Use generic BKE_libblock_copy_nolib() instead. */ Mask *BKE_mask_copy_nolib(Mask *mask) { Mask *mask_new; |