in src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java [273:328]
public void dispose() {
if (this.ah != null) {
ah.dispose();
ah = null;
}
if (this.registration != null) {
this.registration.unregister();
this.registration = null;
}
/*
* Cooperation with doInit: The same lock as used by doInit is acquired
* thus preventing doInit from running and waiting for a concurrent
* doInit to terminate. Once the lock has been acquired, the resource
* resolver is null-ed (thus causing the init to terminate when
* triggered the right after and prevent the doInit method from doing
* anything).
*/
// wait at most 10 seconds for a notification during initialization
boolean initLocked;
try {
initLocked = this.initializing.tryLock(10, TimeUnit.SECONDS);
} catch (final InterruptedException ie) {
initLocked = false;
}
try {
if (!initLocked) {
log.warn(
"dispose: Could not acquire initialization lock within 10 seconds; ongoing initialization may fail");
}
// immediately set the resolver field to null to indicate
// that we have been disposed (this also signals to the
// event handler to stop working
final ResourceResolver oldResolver = this.resolver;
this.resolver = null;
if (oldResolver != null) {
oldResolver.close();
} else {
log.warn("dispose: ResourceResolver has already been cleared before; duplicate call to dispose ?");
}
} finally {
if (initLocked) {
this.initializing.unlock();
}
}
// clear the rest of the fields
this.factory = null;
this.eventAdmin = null;
}