Due to a bug of mine, a file-based array was being sized to the wrong number. Now, it so happens that I had tried to make the wrong number really obviously wrong, so it was trying to grow the file large enough for 0x11111111 4-byte elements. Which is to say, about a gigabyte large.
This resize was failing. And because of imperfect cleanup with the exception, some of the cleanup was creating a deadlock to wait for an event that would never happen.
This was much less obvious when I was just staring at the deadlocked program.