i don't think we want any of these locks to be multi-process locks (if possible), but it does seem like we essentially need to ensure that none of the non-fork-safe locks are acquired when we fork. or maybe a shared memory lock would be cheap and i shouldn't be afraid of that...?