It's also worth pointing out that the general pattern of addref-if-nonzero, although it's kind of fragile, isn't exactly a new one; I've seen it in other code. I think it's probably the best option here.
Ok, let's go with that then. I just wanted to make sure that other options had at least been thought about, as that wasn't at all clear from the description.