public void unregisterStorage(final OStorage iStorage) { if (!active) // SHUTDOWNING OR NOT ACTIVE: RETURN return; acquireExclusiveLock(); try { // UNREGISTER ALL THE LISTENER ONE BY ONE AVOIDING SELF-RECURSION BY REMOVING FROM THE LIST final ArrayList<OOrientListener> listenerCopy = new ArrayList<OOrientListener>(listeners); for (Iterator<OOrientListener> it = listenerCopy.iterator(); it.hasNext(); ) { final OOrientListener l = it.next(); listeners.remove(l); l.onStorageUnregistered(iStorage); } for (Entry<String, OStorage> s : storages.entrySet()) { if (s.getValue() == iStorage) { storages.remove(s.getKey()); break; } } } finally { releaseExclusiveLock(); } }