[ 
https://issues.apache.org/jira/browse/CXF-6629?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]
Chester Kim updated CXF-6629:
-----------------------------
    Description: 
Occasionally, concurrentmodification exception happens in AbstractResourceInfo. 
 Following's a peek of stack trace
{code}
java.util.ConcurrentModificationException at 
java.util.WeakHashMap$HashIterator.nextEntry(WeakHashMap.java:806) at 
java.util.WeakHashMap$ValueIterator.next(WeakHashMap.java:833) at 
org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearProxies(AbstractResourceInfo.java:355)
 at 
org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearThreadLocalProxies(AbstractResourceInfo.java:346)
 at 
org.apache.cxf.jaxrs.provider.ProviderFactory.clearProxies(ProviderFactory.java:745)
 at 
org.apache.cxf.jaxrs.provider.ProviderFactory.clearThreadLocalProxies(ProviderFactory.java:738)
 at org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:1195) 
at org.apache.cxf.jaxrs.client.WebClient.doResponse(WebClient.java:1156) at 
org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1092) 
at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:894) at 
org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:865) at 
org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:428) at 
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1621)
 at 
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1616)
 at 
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.get(WebClient.java:1536) 
at 
org.apache.cxf.jaxrs.client.spec.InvocationBuilderImpl.get(InvocationBuilderImpl.java:80)
 at 
...
{code}
The code is as following
{code}
    private <T> void clearProxies(Map<Class<?>, Map<T, ThreadLocalProxy<?>>> 
tlps) {
        Map<T, ThreadLocalProxy<?>> proxies = tlps == null ? null : 
tlps.get(getServiceClass());
        if (proxies == null) {
            return;
        }
        for (ThreadLocalProxy<?> tlp : proxies.values()) {
            if (tlp != null) {
                tlp.remove();
            }
        }
    }
{code}
I don't think it's good idea to remove threadlocal value while iterating the 
list.

  was:
Occasionally, concurrentmodification exception happens in AbstractResourceInfo. 
 Following's a peek of stack trace
{code}
java.util.ConcurrentModificationException at 
java.util.WeakHashMap$HashIterator.nextEntry(WeakHashMap.java:806) at 
java.util.WeakHashMap$ValueIterator.next(WeakHashMap.java:833) at 
org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearProxies(AbstractResourceInfo.java:355)
 at 
org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearThreadLocalProxies(AbstractResourceInfo.java:346)
 at 
org.apache.cxf.jaxrs.provider.ProviderFactory.clearProxies(ProviderFactory.java:745)
 at 
org.apache.cxf.jaxrs.provider.ProviderFactory.clearThreadLocalProxies(ProviderFactory.java:738)
 at org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:1195) 
at org.apache.cxf.jaxrs.client.WebClient.doResponse(WebClient.java:1156) at 
org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1092) 
at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:894) at 
org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:865) at 
org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:428) at 
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1621)
 at 
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1616)
 at 
org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.get(WebClient.java:1536) 
at 
org.apache.cxf.jaxrs.client.spec.InvocationBuilderImpl.get(InvocationBuilderImpl.java:80)
 at 
...
{code}


> ConcurrentModificationException at AbstractResourceInfo.clearProxies()
> ----------------------------------------------------------------------
>
>                 Key: CXF-6629
>                 URL: https://issues.apache.org/jira/browse/CXF-6629
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 3.1.2
>         Environment: Redhat Enterprise Linux
>            Reporter: Chester Kim
>              Labels: cxf-rt-frontend-jaxrs
>
> Occasionally, concurrentmodification exception happens in 
> AbstractResourceInfo.  Following's a peek of stack trace
> {code}
> java.util.ConcurrentModificationException at 
> java.util.WeakHashMap$HashIterator.nextEntry(WeakHashMap.java:806) at 
> java.util.WeakHashMap$ValueIterator.next(WeakHashMap.java:833) at 
> org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearProxies(AbstractResourceInfo.java:355)
>  at 
> org.apache.cxf.jaxrs.model.AbstractResourceInfo.clearThreadLocalProxies(AbstractResourceInfo.java:346)
>  at 
> org.apache.cxf.jaxrs.provider.ProviderFactory.clearProxies(ProviderFactory.java:745)
>  at 
> org.apache.cxf.jaxrs.provider.ProviderFactory.clearThreadLocalProxies(ProviderFactory.java:738)
>  at org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:1195) 
> at org.apache.cxf.jaxrs.client.WebClient.doResponse(WebClient.java:1156) at 
> org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1092)
>  at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:894) at 
> org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:865) at 
> org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:428) at 
> org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1621)
>  at 
> org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.method(WebClient.java:1616)
>  at 
> org.apache.cxf.jaxrs.client.WebClient$SyncInvokerImpl.get(WebClient.java:1536)
>  at 
> org.apache.cxf.jaxrs.client.spec.InvocationBuilderImpl.get(InvocationBuilderImpl.java:80)
>  at 
> ...
> {code}
> The code is as following
> {code}
>     private <T> void clearProxies(Map<Class<?>, Map<T, ThreadLocalProxy<?>>> 
> tlps) {
>         Map<T, ThreadLocalProxy<?>> proxies = tlps == null ? null : 
> tlps.get(getServiceClass());
>         if (proxies == null) {
>             return;
>         }
>         for (ThreadLocalProxy<?> tlp : proxies.values()) {
>             if (tlp != null) {
>                 tlp.remove();
>             }
>         }
>     }
> {code}
> I don't think it's good idea to remove threadlocal value while iterating the 
> list.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to