Commit: 25057ba37962987afc8a3b636223e35eb203a81f
Author: Martin Felke
Date:   Thu Feb 4 19:53:45 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB25057ba37962987afc8a3b636223e35eb203a81f

added threading lock to modifier sync during rigidbody object sync, helps 
against crashes in dynamic mode

===================================================================

M       source/blender/blenkernel/intern/rigidbody.c

===================================================================

diff --git a/source/blender/blenkernel/intern/rigidbody.c 
b/source/blender/blenkernel/intern/rigidbody.c
index 63d5299..97e92c9 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -43,6 +43,7 @@
 #include "BLI_callbacks.h"
 #include "BLI_math.h"
 #include "BLI_kdtree.h"
+#include "BLI_threads.h"
 #include "BLI_utildefines.h"
 
 #ifdef WITH_BULLET
@@ -3892,7 +3893,7 @@ static bool do_sync_modifier(ModifierData *md, Object 
*ob, RigidBodyWorld *rbw,
                if (isModifierActive(fmd) && exploOK) {
                        modFound = true;
 
-                       if (fmd->fracture_mode == MOD_FRACTURE_DYNAMIC)
+                       if (fmd->fracture_mode == MOD_FRACTURE_DYNAMIC && 
!(ob->flag & SELECT && G.moving & G_TRANSFORM_OBJ))
                        {
                                int frame = (int)ctime;
 
@@ -3985,6 +3986,7 @@ static bool do_sync_modifier(ModifierData *md, Object 
*ob, RigidBodyWorld *rbw,
 }
 
 /* Sync rigid body and object transformations */
+static ThreadMutex modifier_lock = BLI_MUTEX_INITIALIZER;
 void BKE_rigidbody_sync_transforms(RigidBodyWorld *rbw, Object *ob, float 
ctime)
 {
        RigidBodyOb *rbo = NULL;
@@ -3994,11 +3996,13 @@ void BKE_rigidbody_sync_transforms(RigidBodyWorld *rbw, 
Object *ob, float ctime)
        if (rbw == NULL)
                return;
 
+       BLI_mutex_lock(&modifier_lock);
        for (md = ob->modifiers.first; md; md = md->next) {
                modFound = do_sync_modifier(md, ob, rbw, ctime);
                if (modFound)
                        break;
        }
+       BLI_mutex_unlock(&modifier_lock);
 
        if (!modFound)
        {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to