code: void removeManager(CacheManager cm) {
      synchronized (getLockObject()) {
        Map<String, CacheManager> _name2managers = loader2name2manager.get(cm.getClassLoader());
        _name2managers = new HashMap<String, CacheManager>(_name2managers);
        Object _removed = _name2managers.remove(cm.getName());
        Map<ClassLoader, Map<String, CacheManager>> _copy = new WeakHashMap<ClassLoader, Map<String, CacheManager>>(loader2name2manager);
        _copy.put(cm.getClassLoader(), _name2managers);
        loader2name2manager = _copy;
        if (cm.isDefaultManager()) {
          Map<ClassLoader, String> _defaultNameCopy = new WeakHashMap<ClassLoader, String>(loader2defaultName);
          _defaultNameCopy.remove(cm.getClassLoader());
          loader2defaultName = _defaultNameCopy;
        }
      }
    }
docs: Called from the manager after a close. Removes the manager from the known managers.