It's important to note that there is no such thing as the manager's cs. There is the *apartment*'s cs, which protects the manager list. The manager may or may not have a apartment, so we should guard against `This->parent == NULL` case. This inevitably makes the code more branchy, with more if statements.
There is in fact a proxy manager cs (the "cs" member of struct proxy_manager), but grabbing it doesn't help here—we need to grab the same cs that's held in proxy_manager_destroy() when removing from the list.
We could potentially grab the proxy manager cs in proxy_manager_destroy(), though that'd take some investigation as to whether it's actually safe to do so without causing deadlocks and/or lock inversion.
I agree that grabbing the apartment cs conditionally doesn't feel great.
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.