浏览代码

chan: Lock PartBundle while binding animation

This seems like the right thing to do that could prevent some potential race conditions; let me known if this is breaking anything.
rdb 4 年之前
父节点
当前提交
c980643649
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      panda/src/chan/partBundle.cxx

+ 4 - 1
panda/src/chan/partBundle.cxx

@@ -599,6 +599,10 @@ do_bind_anim(AnimControl *control, AnimBundle *anim,
     return false;
   }
 
+  // Grabbing the lock early prevents any other thread in stage 0 from also
+  // trying to modify the channel list at the same time.
+  CDLockedReader cdata(_cycler);
+
   plist<int> holes;
   int channel_index = 0;
   pick_channel_index(holes, channel_index);
@@ -616,7 +620,6 @@ do_bind_anim(AnimControl *control, AnimBundle *anim,
                  subset.is_include_empty(), bound_joints, subset);
   control->setup_anim(this, anim, channel_index, bound_joints);
 
-  CDReader cdata(_cycler);
   determine_effective_channels(cdata);
 
   return true;