[
https://issues.apache.org/jira/browse/SLING-666?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Felix Meschberger closed SLING-666.
-----------------------------------
Resolution: Fixed
Fixed in Rev. 696942.
> ResourceProviders not properly released
> ---------------------------------------
>
> Key: SLING-666
> URL: https://issues.apache.org/jira/browse/SLING-666
> Project: Sling
> Issue Type: Bug
> Components: JCR Resource
> Affects Versions: JCR Resource 2.0.2
> Reporter: Felix Meschberger
> Assignee: Felix Meschberger
> Fix For: JCR Resource 2.0.4
>
>
> When a ResourceProvider is removed from the system, long-lived
> ResourceResolvers may still hold on to the removed resource provider thus
> referring to a non-existing service and also preventing the service and its
> classes from being garbage collected. This only happens to resource providers
> attached to the roote resource provider entry in the
> JcrResourceResolverFactory.
> Implementation background: The JcrResourceResolverFactory maintains a root
> resource provider entry, which contains ResourceProviderEntry instances for
> all ResourceProvider instances directly below root. When creating a new
> JcrResourceResolver instance the child entries of the root resource provider
> are handed over to the new JcrResourceResolver instance.
> When a resource resolver is added to or removed from the root resource
> provider the entries array of the root resource provider is replaced by a new
> instance reflecting the addition or removal. Still, all JcrResourceResolver
> instances already out there refer to the old entry array, which still
> contains the removed provider (or does not contain the added resource
> provider yet).
> The consequences are problematic for long-lived ResourceResovlers:
> * new resource providers directly attached to the root will never be seen
> * old resource providers directly attached to the root will still be seen
> even after removal
> The fix to this problem is to base the JcrResourceResolver returned from the
> JcrResourceResolverFactory on the root resource provider entry itself thus
> using the "live" entries list.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.