My existing approach in D14 is to lock modifying obstruction access behind mutexes. But that has a few drawbacks, namely that I lock way too often.
It seems simpler to move all state to the ObstructionManager, since that's where most is already, and let the manager handle things on its own.
I've set things up so that we could have a "deferred" mode, letting code change obstructions while paths are calculated, but I think an "instant" mode is useful for some code (e.g. a unit that garrisons inside a gate probably wants to trigger gate opening right now, not on the next turn, which is annoying if the obstruction update are deferred). This "instant mode" is pretty much svn behind a mutex.
D14 then just has to lock the mutex while paths make calculations to ensure nobody does anything stupid. It's a cleaner, easier solution.
This also refactors CmpObstruction somewhat.