I'm a bit tired and this is kinda complicated, so please don't mind if I just rehash the issues real quick to avoid misunderstanding.
No worries at all.
For clarification, you mean A passing the check `!impl->ref_public` in `Resolve`, then B calling `Release` and getting a 0, while A gets a valid Object. We need to have both calls either fail or succeed. Correct?
Correct.
Second problem is, when incrementing the count in `Resolve` we could miss that `if (!ref)` in `geolocator_Release`. Right? So we could just always add/release the weak reference in the geolocator.
Yes, the alternative solution would be to duplicate the `geolocator_Release` check in `Resolve`, but it gets a bit awkward and error prone.