lock: if we fork, ensure that only the parent releases
This prevents us from having a bunch of errant worker processes all try
to release a lock if a problem occurs. (Releasing the lock more than once
is harmless; it's invoking the associated callbacks we want to avoid.)
'a' in d: True
d['a']: va
'b' in d: True
d['b']: vb
'c' in d: True
d['c']: vc
'd' in d: True
d['d']: vd
'a' in d: False
'b' in d: True
d['b']: vb
'c' in d: True
d['c']: vc
'd' in d: True
d['d']: vd
'e' in d: True
d['e']: ve
'b' in d: True
d['b']: vb2
'c' in d: True
d['c']: vc2
'd' in d: True
d['d']: vd
'e' in d: False
'f' in d: True
d['f']: vf