I know, it was like that before. What I did is to split single `getProxy()` method into two methods; `createProxy()` and `getOrCreateProxy()`. Because I need to know if a proxy is created by a call or not. Since during join, I need to offload initialization to another thread ..

Current recursive call is needed only when thread A wants to get a proxy which doesn't exist but thread B is already creating it and before thread A gets it, another thread C destroys it..