Aside from passing the block pointer around, I hadn't actually added anything else yet (no caching/indexing) of the block. I finally concluding it had to be an issue of lock contention in the memory deallocation. So I looked at whether blocks or other dynamically created objects were previously spanning threads. Turns out that they are not (with some unrelated exceptions, notably address handling and message heads). Network messages are allocated on the same thread as they notify on, and upon which all subscribers receive and process the message (apart from address, which appears to have the same but much less impactful issue). That changed when I posted the block message to another strand, but would also occur if it was to be posted to another function on the same strand.