I believe it is necessary in this case. The caller could pass in a stack-local block, and we're inserting it into an array, and possibly calling it later on another thread. It's important to get the block off the stack and onto the heap.