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



