Fix T38284: Crash with several shrinkwrap constraint using same target
authorSergey Sharybin <sergey.vfx@gmail.com>
Thu, 23 Jan 2014 10:24:41 +0000 (16:24 +0600)
committerSergey Sharybin <sergey.vfx@gmail.com>
Thu, 23 Jan 2014 10:30:57 +0000 (16:30 +0600)
commitcbdedc169dd948d308dcdb1fc2e74b1fdd25880c
treee16c55249715cef6136b4605b4bb165356e0046e
parent6c1c6f22cea9729c40e02ed45374bad31fbca6dd
Fix T38284: Crash with several shrinkwrap constraint using same target

Issue is caused by the race condition between getting custom data layers
from target's derived mesh (for vertices and faces) and releasing this
derived mesh from other threads.

When one releases the derived mesh it'll free temporary data from it,
and it'll also update data layers mapping.

General rule for threading is that no one is ever allowed to modify
data he doesn't own. This means that no temp layers are to be allocated
in derived mesh and making it so `CustomData_free_temporary()` doesn't
update mapping if nothing was freed will solve the race condition.

It is still possible to do other improvements, namely detect which
additional data/layers are to be present in derived mesh and create
it as a part of `object_handle_update()`, but this is to be solved
separately.
source/blender/blenkernel/intern/customdata.c