Just use a normal reentrant lock. read + write acquire hangs.
*All* uses of OpenFile that would mutate or do IO must lock.