[[!comment format=mdwn
 username="joey"
 subject="""comment 3"""
 date="2016-03-01T16:21:31Z"
 content="""
Analysis: What's crashing is Utility.LockPool.PidLock.waitLock after a call
to Utility.LockPool.PidLock.tryLock. The former takes an exclusive STM lock
of the pid lock file; the latter takes a shared STM lock. 

Since the pid lock stands in for multiple more fine-grained locks, waitLock
will be called while a lock from tryLock (or a previous waitLock perhaps)
is still open.

The fix seems as simple as making waitLock take a shared STM lock of the
pid lock file, leaving the exclusive lock for the later, more fine-grained
STM lock checking that's done after taking the pid lock.
"""]]
