It didn't take much testing to find something that worked single-threaded but failed multi-threaded.
I was expecting this - I figured there'd be issues to work out.
But I was expecting them to be hard to track down and easy to fix and it turned out to be the opposite - easy to track down but hard to fix.
The problem turned out to be more a design flaw than a bug. I've thought of a few solutions but I'm not really happy with any of them.
Oh well, I knew all along this wasn't going to be easy. It'll come.