On Tue, Sep 29, 2009 at 7:17 AM, Don Brown <donald.br...@gmail.com> wrote:
> Any way to easily fix it on 1.8.1? I can't move to 2.0 easily, but
> this issue is quite worrying.

Maybe.

In general, I don't think it is an easy one to hit for you as the
issue at hand is the following. Something at the outside is calling
into java.* classes which lock the appclassloader and then create a
url which goes via the urlhandlers which turn around and try to lock
the serviceregistry (this part has changed in 2.0). At the same time
something on the outside is calling into the framework, trying to get
a service, which locks the serviceregistry and is then triggering a
classload for the appclassloader -> deadlock. This is a pretty special
combination and due to the fact that certain paths inside the java.*
and javax.* packages result in different orders of lock taking.

I can try to look into creating a patch for you as the urlhandlers are
somewhat independent so it might be possible to create an easy
backport but it sure would be nicer if we could get you on the current
trunk. I plan to cut a 2.0.1 release real soon now...

regards,

Karl

> Don
>
> On Tue, Sep 29, 2009 at 11:16 AM, Gerry Woods <gerrywo...@gmail.com> wrote:
>> Thanks for your response Karl.  We examined the 2.0 source today and arrived
>> at the same conclusion.  We're testing with it now.
>>
>> On Mon, Sep 28, 2009 at 2:23 PM, Karl Pauls <karlpa...@gmail.com> wrote:
>>
>>> This looks like something which should not be happening with felix
>>> 2.0.0 anymore. Can you reproduce the issue and if so, can you retry
>>> with felix 2.0?
>>>
>>> regards,
>>>
>>> Karl
>>>
>>> On Sat, Sep 26, 2009 at 1:24 AM, Gerry Woods <gerrywo...@gmail.com> wrote:
>>> > Hi,
>>> > First let me say a word of thanks for the fantastic work you guys have
>>> been
>>> > doing.  We have encountered a deadlock with Felix (1.8.1) and Spring-DM
>>> > (1.2.0) and I wanted to run it by you guys to see if this is a known
>>> issue,
>>> > or if you have any opinions on the problem.  I had a look through Jira
>>> for
>>> > any deadlock-related issues and didn't see anything that looked quite
>>> like
>>> > this.
>>> > Thanks for any help or feedback,
>>> > Gerry
>>> >
>>> >
>>> > Found one Java-level deadlock:
>>> > =============================
>>> > "SpringOsgiExtenderThread-17":
>>> >  waiting to lock monitor 0x0033d8ec (object 0x07f41dc0, a
>>> > org.apache.felix.framework.ServiceRegistry),
>>> >  which is held by "SpringOsgiExtenderThread-3"
>>> > "SpringOsgiExtenderThread-3":
>>> >  waiting to lock monitor 0x0033d7ac (object 0x078c9058, a
>>> > sun.misc.Launcher$AppClassLoader),
>>> >  which is held by "SpringOsgiExtenderThread-17"
>>> >
>>> > Java stack information for the threads listed above:
>>> > ===================================================
>>> > "SpringOsgiExtenderThread-17":
>>> >        at
>>> >
>>> org.apache.felix.framework.ServiceRegistry.getServiceReferences(ServiceRegistry.java:165)
>>> >        - waiting to lock <0x07f41dc0> (a
>>> > org.apache.felix.framework.ServiceRegistry)
>>> >        at
>>> > org.apache.felix.framework.Felix.getServiceReferences(Felix.java:2617)
>>> >        at
>>> >
>>> org.apache.felix.framework.Felix.getAllowedServiceReferences(Felix.java:2672)
>>> >        at
>>> >
>>> org.apache.felix.framework.BundleContextImpl.getServiceReferences(BundleContextImpl.java:310)
>>> >        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> >        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>> >        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>> >        at java.lang.reflect.Method.invoke(Unknown Source)
>>> >        at
>>> >
>>> org.apache.felix.framework.util.SecureAction.invoke(SecureAction.java:763)
>>> >        at
>>> >
>>> org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:476)
>>> >        at
>>> >
>>> org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:352)
>>> >        at java.net.URL.<init>(Unknown Source)
>>> >        at java.net.URL.<init>(Unknown Source)
>>> >        at java.net.URL.<init>(Unknown Source)
>>> >        at java.net.JarURLConnection.parseSpecs(Unknown Source)
>>> >        at java.net.JarURLConnection.<init>(Unknown Source)
>>> >        at sun.net.www.protocol.jar.JarURLConnection.<init>(Unknown
>>> Source)
>>> >        at sun.net.www.protocol.jar.Handler.openConnection(Unknown Source)
>>> >        at java.net.URL.openConnection(Unknown Source)
>>> >        at java.net.URL.openStream(Unknown Source)
>>> >        at java.lang.ClassLoader.getSystemResourceAsStream(Unknown Source)
>>> >        at java.lang.Class.getResourceAsStream(Unknown Source)
>>> >        at sun.text.NormalizerImpl$1.run(Unknown Source)
>>> >        at java.security.AccessController.doPrivileged(Native Method)
>>> >        at sun.text.NormalizerImpl.<init>(Unknown Source)
>>> >        at sun.text.NormalizerImpl.<clinit>(Unknown Source)
>>> >        at sun.text.Normalizer.decompose(Unknown Source)
>>> >        at sun.text.Normalizer$NFKDMode.normalize(Unknown Source)
>>> >        at sun.text.Normalizer.normalize(Unknown Source)
>>> >        at sun.security.x509.AVA.toRFC2253CanonicalString(Unknown Source)
>>> >        at sun.security.x509.RDN.toRFC2253StringInternal(Unknown Source)
>>> >        at sun.security.x509.RDN.toRFC2253String(Unknown Source)
>>> >        at sun.security.x509.X500Name.getRFC2253CanonicalName(Unknown
>>> > Source)
>>> >        at sun.security.x509.X500Name.equals(Unknown Source)
>>> >        at sun.security.pkcs.PKCS7.getCertificate(Unknown Source)
>>> >        at sun.security.pkcs.SignerInfo.getCertificate(Unknown Source)
>>> >        at sun.security.pkcs.SignerInfo.verify(Unknown Source)
>>> >        at sun.security.pkcs.PKCS7.verify(Unknown Source)
>>> >        at sun.security.pkcs.PKCS7.verify(Unknown Source)
>>> >        at sun.security.util.SignatureFileVerifier.processImpl(Unknown
>>> > Source)
>>> >        at sun.security.util.SignatureFileVerifier.process(Unknown Source)
>>> >        at java.util.jar.JarVerifier.processEntry(Unknown Source)
>>> >        at java.util.jar.JarVerifier.update(Unknown Source)
>>> >        at java.util.jar.JarFile.initializeVerifier(Unknown Source)
>>> >        at java.util.jar.JarFile.getInputStream(Unknown Source)
>>> >        - locked <0x078c2b28> (a java.util.jar.JarFile)
>>> >        at sun.misc.URLClassPath$JarLoader$1.getInputStream(Unknown
>>> Source)
>>> >        at sun.misc.Resource.cachedInputStream(Unknown Source)
>>> >        - locked <0x08338cd8> (a sun.misc.URLClassPath$JarLoader$1)
>>> >        at sun.misc.Resource.getByteBuffer(Unknown Source)
>>> >        at java.net.URLClassLoader.defineClass(Unknown Source)
>>> >        at java.net.URLClassLoader.access$100(Unknown Source)
>>> >        at java.net.URLClassLoader$1.run(Unknown Source)
>>> >        at java.security.AccessController.doPrivileged(Native Method)
>>> >        at java.net.URLClassLoader.findClass(Unknown Source)
>>> >        at java.lang.ClassLoader.loadClass(Unknown Source)
>>> >        - locked <0x078d3468> (a sun.misc.Launcher$ExtClassLoader)
>>> >        at java.lang.ClassLoader.loadClass(Unknown Source)
>>> >        - locked <0x078c9058> (a sun.misc.Launcher$AppClassLoader)
>>> >        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
>>> >        - locked <0x078c9058> (a sun.misc.Launcher$AppClassLoader)
>>> >        at java.lang.ClassLoader.loadClass(Unknown Source)
>>> >        at sun.security.jca.ProviderConfig$3.run(Unknown Source)
>>> >        at java.security.AccessController.doPrivileged(Native Method)
>>> >        at sun.security.jca.ProviderConfig.doLoadProvider(Unknown Source)
>>> >        at sun.security.jca.ProviderConfig.getProvider(Unknown Source)
>>> >        - locked <0x078c9058> (a sun.misc.Launcher$AppClassLoader)
>>> >        at sun.security.jca.ProviderList.getProvider(Unknown Source)
>>> >        at sun.security.jca.ProviderList.getIndex(Unknown Source)
>>> >        at sun.security.jca.ProviderList.getProviderConfig(Unknown Source)
>>> >        at sun.security.jca.ProviderList.getProvider(Unknown Source)
>>> >        at java.security.Security.getProvider(Unknown Source)
>>> >        at
>>> >
>>> com.soa.security.spring.ProviderRegistration.register(ProviderRegistration.java:31)
>>> >        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> >        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>> >        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>> >        at java.lang.reflect.Method.invoke(Unknown Source)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
>>> >        at java.security.AccessController.doPrivileged(Native Method)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
>>> >        - locked <0x07ff23f0> (a java.util.concurrent.ConcurrentHashMap)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
>>> >        at
>>> >
>>> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
>>> >        - locked <0x07ff2690> (a java.util.concurrent.ConcurrentHashMap)
>>> >        at
>>> >
>>> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
>>> >        at
>>> >
>>> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:69)
>>> >        at
>>> >
>>> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355)
>>> >        - locked <0x07fe1020> (a java.lang.Object)
>>> >        at
>>> >
>>> org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
>>> >        at
>>> >
>>> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:136)
>>> >        at java.lang.Thread.run(Unknown Source)
>>> > "SpringOsgiExtenderThread-3":
>>> >        at
>>> >
>>> org.apache.felix.framework.util.ldap.Evaluator.evaluate(Evaluator.java:96)
>>> >        at
>>> org.apache.felix.framework.FilterImpl.match(FilterImpl.java:166)
>>> >        at
>>> org.apache.felix.framework.FilterImpl.match(FilterImpl.java:226)
>>> >        at
>>> >
>>> org.apache.felix.framework.ServiceRegistry.getServiceReferences(ServiceRegistry.java:182)
>>> >        - locked <0x07f41dc0> (a
>>> org.apache.felix.framework.ServiceRegistry)
>>> >        at
>>> > org.apache.felix.framework.Felix.getServiceReferences(Felix.java:2617)
>>> >        at
>>> >
>>> org.apache.felix.framework.Felix.getAllowedServiceReferences(Felix.java:2672)
>>> >        at
>>> >
>>> org.apache.felix.framework.BundleContextImpl.getServiceReferences(BundleContextImpl.java:310)
>>> >        at
>>> >
>>> org.springframework.osgi.util.OsgiServiceReferenceUtils.getServiceReferences(OsgiServiceReferenceUtils.java:159)
>>> >        at
>>> >
>>> org.springframework.osgi.util.OsgiServiceReferenceUtils.getServiceReferences(OsgiServiceReferenceUtils.java:195)
>>> >        at
>>> >
>>> org.springframework.osgi.util.OsgiServiceReferenceUtils.isServicePresent(OsgiServiceReferenceUtils.java:327)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.dependencies.startup.MandatoryServiceDependency.isServicePresent(MandatoryServiceDependency.java:82)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.dependencies.startup.DependencyServiceManager.doFindDependencies(DependencyServiceManager.java:287)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.dependencies.startup.DependencyServiceManager.access$700(DependencyServiceManager.java:40)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.dependencies.startup.DependencyServiceManager$1.run(DependencyServiceManager.java:213)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.util.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:124)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.dependencies.startup.DependencyServiceManager.findServiceDependencies(DependencyServiceManager.java:209)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.stageOne(DependencyWaiterApplicationContextExecutor.java:248)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.refresh(DependencyWaiterApplicationContextExecutor.java:175)
>>> >        at
>>> >
>>> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.refresh(AbstractDelegatedExecutionApplicationContext.java:175)
>>> >        at
>>> >
>>> org.springframework.osgi.extender.internal.activator.ContextLoaderListener$2.run(ContextLoaderListener.java:718)
>>> >        at java.lang.Thread.run(Unknown Source)
>>> >
>>> > Found 1 deadlock.
>>> >
>>>
>>>
>>>
>>> --
>>> Karl Pauls
>>> karlpa...@gmail.com
>>>
>>
>



-- 
Karl Pauls
karlpa...@gmail.com

Reply via email to