I know I'm replying a lot to my own posts, but that's just it's me.
Anyway, I've been doing some more testing and the -performSelectorOnMainThread:withObject:waitUntilDone: call in -_stream is not really getting executed, as far as I can tell. I moved the DESTROY(lock) stuff into -_finished: and was getting a seg fault later down the line. I set a break point inside -_finished:, but gdb never got to it, which leads me to believe the method is not being called. I then replaced that call with -performSelector:withObject:, which the way understand simply does the same thing but on the secondary thread, and it worked. Is -performSelectorOnMainThread:... not working?