On Jan 29, 2015, at 5:23 PM, Charles Davis cdavis5x@gmail.com wrote:
You might argue that we don't need to do this because we only use it on the control paths where we initialize it. Ah, but it *is* used on one of the other paths: it is captured by the Block closure whether or not we actually use it inside the Block. This means that, when we copy the Block onto the heap in OnMainThreadAsync(), the runtime will attempt to retain it. For some reason, we got away with this in 32-bit land--probably because the pointer happened to be NULL anyway--but it broke and died horribly on 64-bit.
With this change, 64-bit winemac.drv is actually usable.
Nice. I was aware of the warning but assumed that it was benign. I'm not sure it's a coincidence that it worked in 32-bit. I don't think that dispatch objects are actually automatically retained by blocks which reference them in 32-bit. It's not entirely related, but it's relatively recent that ARC started doing that and, of course, that requires the modern Objective-C runtime and thus 64-bit.
Anyway, I'm glad the Mac driver crashiness in the 64-bit build stemmed from a single cause. I'm sure it wasn't fun to find it. Thanks for doing so.
-Ken