This is a whiteboard. Pay it no attention (for now)

  • Coreloop must not change the reference count of any object
  • Every object is either a container or is in a container
  • Top-Level Containers (Window & Scene):
    • contain their own mutex that's locked during coreloop processing or before destruction
  • All Containers (Bodies contain Sounds, etc):
    • have a children mutex that's locked during children processing and while inserting/removing children
    • since the container holds a reference to each child, they cannot be deleted while this lock is in place
    • new children cannot be inserted during processing to make sure the last one doesn't get bumped
      • this is a bit paranoid. better safe than sorry
  • Children need locks when:
    • if their C attributes change during processing it could cause problems
  • Scene mutex
    • while ODE is processing a scene dont allow any create/destroy/set functions to it

Children MUST:

  • add themselves to parent's Children AFTER they've been initialized
  • remove themselves from parent's Children BEFORE they've been deinitialized
  • deviation from this allows fringe cases of child being processed before its ready or after it's been destroyed