You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Sahoo (JIRA)" <ji...@apache.org> on 2009/04/11 12:06:14 UTC

[jira] Created: (FELIX-1035) deadlock observed while using fileinstall to monitor multiple directories

deadlock observed while using fileinstall to monitor multiple directories
-------------------------------------------------------------------------

                 Key: FELIX-1035
                 URL: https://issues.apache.org/jira/browse/FELIX-1035
             Project: Felix
          Issue Type: Bug
          Components: File Install
    Affects Versions: configadmin-1.0.10
         Environment: Solaris 10/x86
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
fileinstall version #0.9.2
felix version #1.6.0
            Reporter: Sahoo


I am using fileinstall to monitor two directories. fileinstall is configured using config.properties file to monitor a dir called modules. Then I have a cfg file in modules dir that configures fileinstall to monitor a second dir called autodeploy-modules. During subsequent start of the framework, I see deadlock like this:

Found one Java-level deadlock:
=============================
"{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
  waiting to lock monitor 0x0851dac8 (object 0xa0518300, a java.net.URLClassLoader),
  which is held by "Configuration Updater"
"Configuration Updater":
  waiting to lock monitor 0x085202a0 (object 0xa050bd68, a sun.misc.Launcher$ExtClassLoader),
  which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"

Java stack information for the threads listed above:
===================================================
"{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at org.apache.felix.framework.URLHandlersStreamHandlerProxy.class$(URLHandlersStreamHandlerProxy.java:75)
        at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
        at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
        at java.net.URL.<init>(URL.java:596)
        at java.net.URL.<init>(URL.java:464)
        at java.net.URL.<init>(URL.java:413)
        at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
        at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
        at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
        at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
        at java.net.URL.openConnection(URL.java:945)
        at java.net.URL.openStream(URL.java:1009)
        at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
        at java.lang.Class.getResourceAsStream(Class.java:2028)
        at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
        at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
        at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
        at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
        at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
        at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
        at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
        at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
        at java.text.Normalizer.normalize(Normalizer.java:146)
        at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
        at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
        at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
        at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
        at sun.security.x509.X500Name.equals(X500Name.java:400)
        at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
        at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
        at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
        at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
        at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
        at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
        at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
        at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
        at java.util.jar.JarVerifier.update(JarVerifier.java:188)
        at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
        at java.util.jar.JarFile.getInputStream(JarFile.java:386)
        - locked <0xa00f2c60> (a java.util.jar.JarFile)
        at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
        at sun.misc.Resource.cachedInputStream(Resource.java:59)
        - locked <0xa00f3530> (a sun.misc.URLClassPath$JarLoader$2)
        at sun.misc.Resource.getByteBuffer(Resource.java:154)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        - locked <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
        - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
        at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
        - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
        at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
        at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
        at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
        at java.util.AbstractList$Itr.next(AbstractList.java:345)
        at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
        at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
        at java.security.SecureRandom.<init>(SecureRandom.java:133)
        at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
        at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
        at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
        at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
        at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
        at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
        at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
"Configuration Updater":
        at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
        - waiting to lock <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
        - locked <0xa0518300> (a java.net.URLClassLoader)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
        at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
        at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        - locked <0xa0a5ef58> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
        at org.apache.felix.cm.impl.ConfigurationManager.getPersistenceManagers(ConfigurationManager.java:568)
        at org.apache.felix.cm.impl.ConfigurationManager.getFactory(ConfigurationManager.java:677)
        at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1014)
        at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)

Found 1 deadlock.

I tried to reproduce the issue using a simple program, but I could not. But, I am able to reproduce the issue in my environment, where I use GlassFish application server which runs on Felix and uses fileinstall.

I understand this deadlock has to do with "deadlock observed in Sun JVM during parallel classloading," given that the threads involved are Felix threads, can we put any workaround in exercised code path to avoid this deadlock?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (FELIX-1035) deadlock observed while using fileinstall to monitor multiple directories

Posted by "Richard S. Hall (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/FELIX-1035?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Richard S. Hall resolved FELIX-1035.
------------------------------------

    Resolution: Fixed

Marking as resolved, since we haven't heard otherwise. Please close if you get a chance.

> deadlock observed while using fileinstall to monitor multiple directories
> -------------------------------------------------------------------------
>
>                 Key: FELIX-1035
>                 URL: https://issues.apache.org/jira/browse/FELIX-1035
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: felix-1.6.0
>         Environment: Solaris 10/x86
> java version "1.6.0_07"
> Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
> Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
> fileinstall version #0.9.2
> felix version #1.6.0
>            Reporter: Sahoo
>            Assignee: Karl Pauls
>             Fix For: felix-1.6.1
>
>
> I am using fileinstall to monitor two directories. fileinstall is configured using config.properties file to monitor a dir called modules. Then I have a cfg file in modules dir that configures fileinstall to monitor a second dir called autodeploy-modules. During subsequent start of the framework, I see deadlock like this:
> Found one Java-level deadlock:
> =============================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>   waiting to lock monitor 0x0851dac8 (object 0xa0518300, a java.net.URLClassLoader),
>   which is held by "Configuration Updater"
> "Configuration Updater":
>   waiting to lock monitor 0x085202a0 (object 0xa050bd68, a sun.misc.Launcher$ExtClassLoader),
>   which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"
> Java stack information for the threads listed above:
> ===================================================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:169)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.class$(URLHandlersStreamHandlerProxy.java:75)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
>         at java.net.URL.<init>(URL.java:596)
>         at java.net.URL.<init>(URL.java:464)
>         at java.net.URL.<init>(URL.java:413)
>         at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
>         at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
>         at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
>         at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
>         at java.net.URL.openConnection(URL.java:945)
>         at java.net.URL.openStream(URL.java:1009)
>         at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
>         at java.lang.Class.getResourceAsStream(Class.java:2028)
>         at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
>         at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
>         at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
>         at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
>         at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
>         at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
>         at java.text.Normalizer.normalize(Normalizer.java:146)
>         at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
>         at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
>         at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
>         at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
>         at sun.security.x509.X500Name.equals(X500Name.java:400)
>         at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
>         at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
>         at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
>         at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
>         at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
>         at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
>         at java.util.jar.JarVerifier.update(JarVerifier.java:188)
>         at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
>         at java.util.jar.JarFile.getInputStream(JarFile.java:386)
>         - locked <0xa00f2c60> (a java.util.jar.JarFile)
>         at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
>         at sun.misc.Resource.cachedInputStream(Resource.java:59)
>         - locked <0xa00f3530> (a sun.misc.URLClassPath$JarLoader$2)
>         at sun.misc.Resource.getByteBuffer(Resource.java:154)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
>         at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>         - locked <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
>         at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
>         at java.util.AbstractList$Itr.next(AbstractList.java:345)
>         at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
>         at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
>         at java.security.SecureRandom.<init>(SecureRandom.java:133)
>         at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
>         at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
>         at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
>         at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
>         at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
>         at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
>         at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
> "Configuration Updater":
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
>         - waiting to lock <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa0518300> (a java.net.URLClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>         - locked <0xa0a5ef58> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
>         at org.apache.felix.cm.impl.ConfigurationManager.getPersistenceManagers(ConfigurationManager.java:568)
>         at org.apache.felix.cm.impl.ConfigurationManager.getFactory(ConfigurationManager.java:677)
>         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1014)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
> Found 1 deadlock.
> I tried to reproduce the issue using a simple program, but I could not. But, I am able to reproduce the issue in my environment, where I use GlassFish application server which runs on Felix and uses fileinstall.
> I understand this deadlock has to do with "deadlock observed in Sun JVM during parallel classloading," given that the threads involved are Felix threads, can we put any workaround in exercised code path to avoid this deadlock?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (FELIX-1035) deadlock observed while using fileinstall to monitor multiple directories

Posted by "Karl Pauls (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/FELIX-1035?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12699132#action_12699132 ] 

Karl Pauls commented on FELIX-1035:
-----------------------------------

Thanks for providing the update. I'm looking into it. 

The reason is that we still try to load classes inside the urlhandlers which in this case happens while we are inside a classload already because the classloader uses urls to load the bytes of the class. I know how to fix it but it is more difficult then it looks mainly because the URLHandlers are a mine field already and I have to be very careful not to make it break in other ways. I'll come back to this issue soon. 

> deadlock observed while using fileinstall to monitor multiple directories
> -------------------------------------------------------------------------
>
>                 Key: FELIX-1035
>                 URL: https://issues.apache.org/jira/browse/FELIX-1035
>             Project: Felix
>          Issue Type: Bug
>          Components: File Install
>    Affects Versions: configadmin-1.0.10
>         Environment: Solaris 10/x86
> java version "1.6.0_07"
> Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
> Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
> fileinstall version #0.9.2
> felix version #1.6.0
>            Reporter: Sahoo
>            Assignee: Karl Pauls
>
> I am using fileinstall to monitor two directories. fileinstall is configured using config.properties file to monitor a dir called modules. Then I have a cfg file in modules dir that configures fileinstall to monitor a second dir called autodeploy-modules. During subsequent start of the framework, I see deadlock like this:
> Found one Java-level deadlock:
> =============================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>   waiting to lock monitor 0x0851dac8 (object 0xa0518300, a java.net.URLClassLoader),
>   which is held by "Configuration Updater"
> "Configuration Updater":
>   waiting to lock monitor 0x085202a0 (object 0xa050bd68, a sun.misc.Launcher$ExtClassLoader),
>   which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"
> Java stack information for the threads listed above:
> ===================================================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:169)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.class$(URLHandlersStreamHandlerProxy.java:75)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
>         at java.net.URL.<init>(URL.java:596)
>         at java.net.URL.<init>(URL.java:464)
>         at java.net.URL.<init>(URL.java:413)
>         at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
>         at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
>         at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
>         at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
>         at java.net.URL.openConnection(URL.java:945)
>         at java.net.URL.openStream(URL.java:1009)
>         at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
>         at java.lang.Class.getResourceAsStream(Class.java:2028)
>         at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
>         at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
>         at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
>         at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
>         at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
>         at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
>         at java.text.Normalizer.normalize(Normalizer.java:146)
>         at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
>         at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
>         at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
>         at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
>         at sun.security.x509.X500Name.equals(X500Name.java:400)
>         at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
>         at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
>         at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
>         at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
>         at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
>         at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
>         at java.util.jar.JarVerifier.update(JarVerifier.java:188)
>         at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
>         at java.util.jar.JarFile.getInputStream(JarFile.java:386)
>         - locked <0xa00f2c60> (a java.util.jar.JarFile)
>         at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
>         at sun.misc.Resource.cachedInputStream(Resource.java:59)
>         - locked <0xa00f3530> (a sun.misc.URLClassPath$JarLoader$2)
>         at sun.misc.Resource.getByteBuffer(Resource.java:154)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
>         at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>         - locked <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
>         at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
>         at java.util.AbstractList$Itr.next(AbstractList.java:345)
>         at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
>         at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
>         at java.security.SecureRandom.<init>(SecureRandom.java:133)
>         at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
>         at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
>         at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
>         at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
>         at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
>         at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
>         at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
> "Configuration Updater":
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
>         - waiting to lock <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa0518300> (a java.net.URLClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>         - locked <0xa0a5ef58> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
>         at org.apache.felix.cm.impl.ConfigurationManager.getPersistenceManagers(ConfigurationManager.java:568)
>         at org.apache.felix.cm.impl.ConfigurationManager.getFactory(ConfigurationManager.java:677)
>         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1014)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
> Found 1 deadlock.
> I tried to reproduce the issue using a simple program, but I could not. But, I am able to reproduce the issue in my environment, where I use GlassFish application server which runs on Felix and uses fileinstall.
> I understand this deadlock has to do with "deadlock observed in Sun JVM during parallel classloading," given that the threads involved are Felix threads, can we put any workaround in exercised code path to avoid this deadlock?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (FELIX-1035) deadlock observed while using fileinstall to monitor multiple directories

Posted by "Karl Pauls (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/FELIX-1035?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12700159#action_12700159 ] 

Karl Pauls commented on FELIX-1035:
-----------------------------------

Ok. I did commit another attempt at fixing this issue. Could you update to trunk and see whether it makes any difference? 

> deadlock observed while using fileinstall to monitor multiple directories
> -------------------------------------------------------------------------
>
>                 Key: FELIX-1035
>                 URL: https://issues.apache.org/jira/browse/FELIX-1035
>             Project: Felix
>          Issue Type: Bug
>          Components: File Install
>    Affects Versions: configadmin-1.0.10
>         Environment: Solaris 10/x86
> java version "1.6.0_07"
> Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
> Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
> fileinstall version #0.9.2
> felix version #1.6.0
>            Reporter: Sahoo
>            Assignee: Karl Pauls
>
> I am using fileinstall to monitor two directories. fileinstall is configured using config.properties file to monitor a dir called modules. Then I have a cfg file in modules dir that configures fileinstall to monitor a second dir called autodeploy-modules. During subsequent start of the framework, I see deadlock like this:
> Found one Java-level deadlock:
> =============================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>   waiting to lock monitor 0x0851dac8 (object 0xa0518300, a java.net.URLClassLoader),
>   which is held by "Configuration Updater"
> "Configuration Updater":
>   waiting to lock monitor 0x085202a0 (object 0xa050bd68, a sun.misc.Launcher$ExtClassLoader),
>   which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"
> Java stack information for the threads listed above:
> ===================================================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:169)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.class$(URLHandlersStreamHandlerProxy.java:75)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
>         at java.net.URL.<init>(URL.java:596)
>         at java.net.URL.<init>(URL.java:464)
>         at java.net.URL.<init>(URL.java:413)
>         at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
>         at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
>         at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
>         at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
>         at java.net.URL.openConnection(URL.java:945)
>         at java.net.URL.openStream(URL.java:1009)
>         at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
>         at java.lang.Class.getResourceAsStream(Class.java:2028)
>         at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
>         at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
>         at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
>         at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
>         at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
>         at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
>         at java.text.Normalizer.normalize(Normalizer.java:146)
>         at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
>         at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
>         at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
>         at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
>         at sun.security.x509.X500Name.equals(X500Name.java:400)
>         at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
>         at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
>         at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
>         at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
>         at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
>         at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
>         at java.util.jar.JarVerifier.update(JarVerifier.java:188)
>         at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
>         at java.util.jar.JarFile.getInputStream(JarFile.java:386)
>         - locked <0xa00f2c60> (a java.util.jar.JarFile)
>         at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
>         at sun.misc.Resource.cachedInputStream(Resource.java:59)
>         - locked <0xa00f3530> (a sun.misc.URLClassPath$JarLoader$2)
>         at sun.misc.Resource.getByteBuffer(Resource.java:154)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
>         at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>         - locked <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
>         at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
>         at java.util.AbstractList$Itr.next(AbstractList.java:345)
>         at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
>         at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
>         at java.security.SecureRandom.<init>(SecureRandom.java:133)
>         at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
>         at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
>         at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
>         at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
>         at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
>         at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
>         at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
> "Configuration Updater":
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
>         - waiting to lock <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa0518300> (a java.net.URLClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>         - locked <0xa0a5ef58> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
>         at org.apache.felix.cm.impl.ConfigurationManager.getPersistenceManagers(ConfigurationManager.java:568)
>         at org.apache.felix.cm.impl.ConfigurationManager.getFactory(ConfigurationManager.java:677)
>         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1014)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
> Found 1 deadlock.
> I tried to reproduce the issue using a simple program, but I could not. But, I am able to reproduce the issue in my environment, where I use GlassFish application server which runs on Felix and uses fileinstall.
> I understand this deadlock has to do with "deadlock observed in Sun JVM during parallel classloading," given that the threads involved are Felix threads, can we put any workaround in exercised code path to avoid this deadlock?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (FELIX-1035) deadlock observed while using fileinstall to monitor multiple directories

Posted by "Sahoo (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/FELIX-1035?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12698099#action_12698099 ] 

Sahoo commented on FELIX-1035:
------------------------------

Karl,

thanks for the quick turn aroud. After applying your fix, I tried reproducing the original issue. Although I could not get the original deadlock, I sometimes get a different deadlock as shown below:

Found one Java-level deadlock:
=============================
"{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
  waiting to lock monitor 0x080e8160 (object 0xa0517128, a java.net.URLClassLoader),
  which is held by "FelixStartLevel"
"FelixStartLevel":
  waiting to lock monitor 0x08524dfc (object 0xa050bca0, a sun.misc.Launcher$ExtClassLoader),
  which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"

Java stack information for the threads listed above:
===================================================
"{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
        at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
        - waiting to lock <0xa0517128> (a java.net.URLClassLoader)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
        at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
        at java.net.URL.<init>(URL.java:596)
        at java.net.URL.<init>(URL.java:464)
        at java.net.URL.<init>(URL.java:413)
        at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
        at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
        at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
        at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
        at java.net.URL.openConnection(URL.java:945)
        at java.net.URL.openStream(URL.java:1009)
        at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
        at java.lang.Class.getResourceAsStream(Class.java:2028)
        at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
        at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
        at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
        at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
        at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
        at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
        at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
        at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
        at java.text.Normalizer.normalize(Normalizer.java:146)
        at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
        at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
        at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
        at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
        at sun.security.x509.X500Name.equals(X500Name.java:400)
        at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
        at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
        at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
        at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
        at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
        at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
        at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
        at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
        at java.util.jar.JarVerifier.update(JarVerifier.java:188)
        at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
        at java.util.jar.JarFile.getInputStream(JarFile.java:386)
        - locked <0xa0a50c38> (a java.util.jar.JarFile)
        at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
        at sun.misc.Resource.cachedInputStream(Resource.java:59)
        - locked <0xa0a50cb0> (a sun.misc.URLClassPath$JarLoader$2)
        at sun.misc.Resource.getByteBuffer(Resource.java:154)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        - locked <0xa050bca0> (a sun.misc.Launcher$ExtClassLoader)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
        - locked <0xa0507840> (a sun.misc.Launcher$AppClassLoader)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        - locked <0xa0507840> (a sun.misc.Launcher$AppClassLoader)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
        at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
        - locked <0xa0507840> (a sun.misc.Launcher$AppClassLoader)
        at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
        at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
        at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
        at java.util.AbstractList$Itr.next(AbstractList.java:345)
        at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
        at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
        at java.security.SecureRandom.<init>(SecureRandom.java:133)
        at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
        at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
        at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
        at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
        at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
        at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
        at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
"FelixStartLevel":
        at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
        - waiting to lock <0xa050bca0> (a sun.misc.Launcher$ExtClassLoader)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
        - locked <0xa0517128> (a java.net.URLClassLoader)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
        at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
        at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        - locked <0xa0a7a080> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
        at java.lang.Class.getConstructor0(Class.java:2699)
        at java.lang.Class.newInstance0(Class.java:326)
        at java.lang.Class.newInstance(Class.java:308)
        at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:3341)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1453)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:774)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:755)
        at org.jvnet.hk2.osgimain.Main.start(Main.java:104)
        at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:589)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1458)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:984)
        at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:263)
        at java.lang.Thread.run(Thread.java:619)

Found 1 deadlock.

What is this SecureRandom thing? Is it really needed?

Sahoo

> deadlock observed while using fileinstall to monitor multiple directories
> -------------------------------------------------------------------------
>
>                 Key: FELIX-1035
>                 URL: https://issues.apache.org/jira/browse/FELIX-1035
>             Project: Felix
>          Issue Type: Bug
>          Components: File Install
>    Affects Versions: configadmin-1.0.10
>         Environment: Solaris 10/x86
> java version "1.6.0_07"
> Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
> Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
> fileinstall version #0.9.2
> felix version #1.6.0
>            Reporter: Sahoo
>            Assignee: Karl Pauls
>
> I am using fileinstall to monitor two directories. fileinstall is configured using config.properties file to monitor a dir called modules. Then I have a cfg file in modules dir that configures fileinstall to monitor a second dir called autodeploy-modules. During subsequent start of the framework, I see deadlock like this:
> Found one Java-level deadlock:
> =============================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>   waiting to lock monitor 0x0851dac8 (object 0xa0518300, a java.net.URLClassLoader),
>   which is held by "Configuration Updater"
> "Configuration Updater":
>   waiting to lock monitor 0x085202a0 (object 0xa050bd68, a sun.misc.Launcher$ExtClassLoader),
>   which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"
> Java stack information for the threads listed above:
> ===================================================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:169)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.class$(URLHandlersStreamHandlerProxy.java:75)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
>         at java.net.URL.<init>(URL.java:596)
>         at java.net.URL.<init>(URL.java:464)
>         at java.net.URL.<init>(URL.java:413)
>         at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
>         at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
>         at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
>         at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
>         at java.net.URL.openConnection(URL.java:945)
>         at java.net.URL.openStream(URL.java:1009)
>         at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
>         at java.lang.Class.getResourceAsStream(Class.java:2028)
>         at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
>         at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
>         at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
>         at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
>         at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
>         at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
>         at java.text.Normalizer.normalize(Normalizer.java:146)
>         at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
>         at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
>         at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
>         at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
>         at sun.security.x509.X500Name.equals(X500Name.java:400)
>         at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
>         at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
>         at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
>         at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
>         at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
>         at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
>         at java.util.jar.JarVerifier.update(JarVerifier.java:188)
>         at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
>         at java.util.jar.JarFile.getInputStream(JarFile.java:386)
>         - locked <0xa00f2c60> (a java.util.jar.JarFile)
>         at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
>         at sun.misc.Resource.cachedInputStream(Resource.java:59)
>         - locked <0xa00f3530> (a sun.misc.URLClassPath$JarLoader$2)
>         at sun.misc.Resource.getByteBuffer(Resource.java:154)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
>         at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>         - locked <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
>         at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
>         at java.util.AbstractList$Itr.next(AbstractList.java:345)
>         at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
>         at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
>         at java.security.SecureRandom.<init>(SecureRandom.java:133)
>         at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
>         at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
>         at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
>         at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
>         at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
>         at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
>         at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
> "Configuration Updater":
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
>         - waiting to lock <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa0518300> (a java.net.URLClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>         - locked <0xa0a5ef58> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
>         at org.apache.felix.cm.impl.ConfigurationManager.getPersistenceManagers(ConfigurationManager.java:568)
>         at org.apache.felix.cm.impl.ConfigurationManager.getFactory(ConfigurationManager.java:677)
>         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1014)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
> Found 1 deadlock.
> I tried to reproduce the issue using a simple program, but I could not. But, I am able to reproduce the issue in my environment, where I use GlassFish application server which runs on Felix and uses fileinstall.
> I understand this deadlock has to do with "deadlock observed in Sun JVM during parallel classloading," given that the threads involved are Felix threads, can we put any workaround in exercised code path to avoid this deadlock?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Closed: (FELIX-1035) deadlock observed while using fileinstall to monitor multiple directories

Posted by "Sahoo (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/FELIX-1035?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Sahoo closed FELIX-1035.
------------------------


It took some time to test, but the fix seems to have fixed the deadlock. So, I am closing this issue.

> deadlock observed while using fileinstall to monitor multiple directories
> -------------------------------------------------------------------------
>
>                 Key: FELIX-1035
>                 URL: https://issues.apache.org/jira/browse/FELIX-1035
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: felix-1.6.0
>         Environment: Solaris 10/x86
> java version "1.6.0_07"
> Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
> Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
> fileinstall version #0.9.2
> felix version #1.6.0
>            Reporter: Sahoo
>            Assignee: Karl Pauls
>             Fix For: felix-1.6.1
>
>
> I am using fileinstall to monitor two directories. fileinstall is configured using config.properties file to monitor a dir called modules. Then I have a cfg file in modules dir that configures fileinstall to monitor a second dir called autodeploy-modules. During subsequent start of the framework, I see deadlock like this:
> Found one Java-level deadlock:
> =============================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>   waiting to lock monitor 0x0851dac8 (object 0xa0518300, a java.net.URLClassLoader),
>   which is held by "Configuration Updater"
> "Configuration Updater":
>   waiting to lock monitor 0x085202a0 (object 0xa050bd68, a sun.misc.Launcher$ExtClassLoader),
>   which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"
> Java stack information for the threads listed above:
> ===================================================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:169)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.class$(URLHandlersStreamHandlerProxy.java:75)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
>         at java.net.URL.<init>(URL.java:596)
>         at java.net.URL.<init>(URL.java:464)
>         at java.net.URL.<init>(URL.java:413)
>         at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
>         at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
>         at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
>         at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
>         at java.net.URL.openConnection(URL.java:945)
>         at java.net.URL.openStream(URL.java:1009)
>         at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
>         at java.lang.Class.getResourceAsStream(Class.java:2028)
>         at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
>         at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
>         at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
>         at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
>         at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
>         at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
>         at java.text.Normalizer.normalize(Normalizer.java:146)
>         at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
>         at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
>         at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
>         at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
>         at sun.security.x509.X500Name.equals(X500Name.java:400)
>         at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
>         at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
>         at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
>         at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
>         at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
>         at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
>         at java.util.jar.JarVerifier.update(JarVerifier.java:188)
>         at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
>         at java.util.jar.JarFile.getInputStream(JarFile.java:386)
>         - locked <0xa00f2c60> (a java.util.jar.JarFile)
>         at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
>         at sun.misc.Resource.cachedInputStream(Resource.java:59)
>         - locked <0xa00f3530> (a sun.misc.URLClassPath$JarLoader$2)
>         at sun.misc.Resource.getByteBuffer(Resource.java:154)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
>         at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>         - locked <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
>         at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
>         at java.util.AbstractList$Itr.next(AbstractList.java:345)
>         at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
>         at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
>         at java.security.SecureRandom.<init>(SecureRandom.java:133)
>         at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
>         at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
>         at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
>         at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
>         at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
>         at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
>         at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
> "Configuration Updater":
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
>         - waiting to lock <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa0518300> (a java.net.URLClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>         - locked <0xa0a5ef58> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
>         at org.apache.felix.cm.impl.ConfigurationManager.getPersistenceManagers(ConfigurationManager.java:568)
>         at org.apache.felix.cm.impl.ConfigurationManager.getFactory(ConfigurationManager.java:677)
>         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1014)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
> Found 1 deadlock.
> I tried to reproduce the issue using a simple program, but I could not. But, I am able to reproduce the issue in my environment, where I use GlassFish application server which runs on Felix and uses fileinstall.
> I understand this deadlock has to do with "deadlock observed in Sun JVM during parallel classloading," given that the threads involved are Felix threads, can we put any workaround in exercised code path to avoid this deadlock?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Assigned: (FELIX-1035) deadlock observed while using fileinstall to monitor multiple directories

Posted by "Karl Pauls (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/FELIX-1035?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Karl Pauls reassigned FELIX-1035:
---------------------------------

    Assignee: Karl Pauls

> deadlock observed while using fileinstall to monitor multiple directories
> -------------------------------------------------------------------------
>
>                 Key: FELIX-1035
>                 URL: https://issues.apache.org/jira/browse/FELIX-1035
>             Project: Felix
>          Issue Type: Bug
>          Components: File Install
>    Affects Versions: configadmin-1.0.10
>         Environment: Solaris 10/x86
> java version "1.6.0_07"
> Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
> Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
> fileinstall version #0.9.2
> felix version #1.6.0
>            Reporter: Sahoo
>            Assignee: Karl Pauls
>
> I am using fileinstall to monitor two directories. fileinstall is configured using config.properties file to monitor a dir called modules. Then I have a cfg file in modules dir that configures fileinstall to monitor a second dir called autodeploy-modules. During subsequent start of the framework, I see deadlock like this:
> Found one Java-level deadlock:
> =============================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>   waiting to lock monitor 0x0851dac8 (object 0xa0518300, a java.net.URLClassLoader),
>   which is held by "Configuration Updater"
> "Configuration Updater":
>   waiting to lock monitor 0x085202a0 (object 0xa050bd68, a sun.misc.Launcher$ExtClassLoader),
>   which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"
> Java stack information for the threads listed above:
> ===================================================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:169)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.class$(URLHandlersStreamHandlerProxy.java:75)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
>         at java.net.URL.<init>(URL.java:596)
>         at java.net.URL.<init>(URL.java:464)
>         at java.net.URL.<init>(URL.java:413)
>         at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
>         at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
>         at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
>         at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
>         at java.net.URL.openConnection(URL.java:945)
>         at java.net.URL.openStream(URL.java:1009)
>         at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
>         at java.lang.Class.getResourceAsStream(Class.java:2028)
>         at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
>         at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
>         at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
>         at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
>         at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
>         at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
>         at java.text.Normalizer.normalize(Normalizer.java:146)
>         at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
>         at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
>         at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
>         at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
>         at sun.security.x509.X500Name.equals(X500Name.java:400)
>         at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
>         at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
>         at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
>         at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
>         at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
>         at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
>         at java.util.jar.JarVerifier.update(JarVerifier.java:188)
>         at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
>         at java.util.jar.JarFile.getInputStream(JarFile.java:386)
>         - locked <0xa00f2c60> (a java.util.jar.JarFile)
>         at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
>         at sun.misc.Resource.cachedInputStream(Resource.java:59)
>         - locked <0xa00f3530> (a sun.misc.URLClassPath$JarLoader$2)
>         at sun.misc.Resource.getByteBuffer(Resource.java:154)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
>         at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>         - locked <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
>         at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
>         at java.util.AbstractList$Itr.next(AbstractList.java:345)
>         at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
>         at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
>         at java.security.SecureRandom.<init>(SecureRandom.java:133)
>         at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
>         at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
>         at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
>         at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
>         at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
>         at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
>         at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
> "Configuration Updater":
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
>         - waiting to lock <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa0518300> (a java.net.URLClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>         - locked <0xa0a5ef58> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
>         at org.apache.felix.cm.impl.ConfigurationManager.getPersistenceManagers(ConfigurationManager.java:568)
>         at org.apache.felix.cm.impl.ConfigurationManager.getFactory(ConfigurationManager.java:677)
>         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1014)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
> Found 1 deadlock.
> I tried to reproduce the issue using a simple program, but I could not. But, I am able to reproduce the issue in my environment, where I use GlassFish application server which runs on Felix and uses fileinstall.
> I understand this deadlock has to do with "deadlock observed in Sun JVM during parallel classloading," given that the threads involved are Felix threads, can we put any workaround in exercised code path to avoid this deadlock?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (FELIX-1035) deadlock observed while using fileinstall to monitor multiple directories

Posted by "Karl Pauls (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/FELIX-1035?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12698068#action_12698068 ] 

Karl Pauls commented on FELIX-1035:
-----------------------------------

I just commited a quick fix. Could you try with the current trunk and see whether that makes a difference? If not, I will have to investigate it more deeply.

> deadlock observed while using fileinstall to monitor multiple directories
> -------------------------------------------------------------------------
>
>                 Key: FELIX-1035
>                 URL: https://issues.apache.org/jira/browse/FELIX-1035
>             Project: Felix
>          Issue Type: Bug
>          Components: File Install
>    Affects Versions: configadmin-1.0.10
>         Environment: Solaris 10/x86
> java version "1.6.0_07"
> Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
> Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
> fileinstall version #0.9.2
> felix version #1.6.0
>            Reporter: Sahoo
>            Assignee: Karl Pauls
>
> I am using fileinstall to monitor two directories. fileinstall is configured using config.properties file to monitor a dir called modules. Then I have a cfg file in modules dir that configures fileinstall to monitor a second dir called autodeploy-modules. During subsequent start of the framework, I see deadlock like this:
> Found one Java-level deadlock:
> =============================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>   waiting to lock monitor 0x0851dac8 (object 0xa0518300, a java.net.URLClassLoader),
>   which is held by "Configuration Updater"
> "Configuration Updater":
>   waiting to lock monitor 0x085202a0 (object 0xa050bd68, a sun.misc.Launcher$ExtClassLoader),
>   which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"
> Java stack information for the threads listed above:
> ===================================================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:169)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.class$(URLHandlersStreamHandlerProxy.java:75)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
>         at java.net.URL.<init>(URL.java:596)
>         at java.net.URL.<init>(URL.java:464)
>         at java.net.URL.<init>(URL.java:413)
>         at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
>         at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
>         at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
>         at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
>         at java.net.URL.openConnection(URL.java:945)
>         at java.net.URL.openStream(URL.java:1009)
>         at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
>         at java.lang.Class.getResourceAsStream(Class.java:2028)
>         at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
>         at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
>         at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
>         at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
>         at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
>         at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
>         at java.text.Normalizer.normalize(Normalizer.java:146)
>         at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
>         at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
>         at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
>         at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
>         at sun.security.x509.X500Name.equals(X500Name.java:400)
>         at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
>         at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
>         at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
>         at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
>         at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
>         at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
>         at java.util.jar.JarVerifier.update(JarVerifier.java:188)
>         at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
>         at java.util.jar.JarFile.getInputStream(JarFile.java:386)
>         - locked <0xa00f2c60> (a java.util.jar.JarFile)
>         at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
>         at sun.misc.Resource.cachedInputStream(Resource.java:59)
>         - locked <0xa00f3530> (a sun.misc.URLClassPath$JarLoader$2)
>         at sun.misc.Resource.getByteBuffer(Resource.java:154)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
>         at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>         - locked <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
>         at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
>         at java.util.AbstractList$Itr.next(AbstractList.java:345)
>         at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
>         at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
>         at java.security.SecureRandom.<init>(SecureRandom.java:133)
>         at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
>         at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
>         at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
>         at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
>         at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
>         at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
>         at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
> "Configuration Updater":
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
>         - waiting to lock <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa0518300> (a java.net.URLClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>         - locked <0xa0a5ef58> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
>         at org.apache.felix.cm.impl.ConfigurationManager.getPersistenceManagers(ConfigurationManager.java:568)
>         at org.apache.felix.cm.impl.ConfigurationManager.getFactory(ConfigurationManager.java:677)
>         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1014)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
> Found 1 deadlock.
> I tried to reproduce the issue using a simple program, but I could not. But, I am able to reproduce the issue in my environment, where I use GlassFish application server which runs on Felix and uses fileinstall.
> I understand this deadlock has to do with "deadlock observed in Sun JVM during parallel classloading," given that the threads involved are Felix threads, can we put any workaround in exercised code path to avoid this deadlock?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (FELIX-1035) deadlock observed while using fileinstall to monitor multiple directories

Posted by "Richard S. Hall (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/FELIX-1035?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Richard S. Hall updated FELIX-1035:
-----------------------------------

          Component/s:     (was: File Install)
                       Framework
    Affects Version/s:     (was: configadmin-1.0.10)
                       felix-1.6.0
        Fix Version/s: felix-1.6.1

> deadlock observed while using fileinstall to monitor multiple directories
> -------------------------------------------------------------------------
>
>                 Key: FELIX-1035
>                 URL: https://issues.apache.org/jira/browse/FELIX-1035
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: felix-1.6.0
>         Environment: Solaris 10/x86
> java version "1.6.0_07"
> Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
> Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
> fileinstall version #0.9.2
> felix version #1.6.0
>            Reporter: Sahoo
>            Assignee: Karl Pauls
>             Fix For: felix-1.6.1
>
>
> I am using fileinstall to monitor two directories. fileinstall is configured using config.properties file to monitor a dir called modules. Then I have a cfg file in modules dir that configures fileinstall to monitor a second dir called autodeploy-modules. During subsequent start of the framework, I see deadlock like this:
> Found one Java-level deadlock:
> =============================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>   waiting to lock monitor 0x0851dac8 (object 0xa0518300, a java.net.URLClassLoader),
>   which is held by "Configuration Updater"
> "Configuration Updater":
>   waiting to lock monitor 0x085202a0 (object 0xa050bd68, a sun.misc.Launcher$ExtClassLoader),
>   which is held by "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}"
> Java stack information for the threads listed above:
> ===================================================
> "{felix.fileinstall.poll=5000, felix.fileinstall.bundles.new.start=false, felix.fileinstall.dir=/space/ss141213/WS/gf/v3.trunk.new/publish/glassfish/modules/, felix.fileinstall.debug=1}":
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:169)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.class$(URLHandlersStreamHandlerProxy.java:75)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.getStreamHandlerService(URLHandlersStreamHandlerProxy.java:438)
>         at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:297)
>         at java.net.URL.<init>(URL.java:596)
>         at java.net.URL.<init>(URL.java:464)
>         at java.net.URL.<init>(URL.java:413)
>         at java.net.JarURLConnection.parseSpecs(JarURLConnection.java:161)
>         at java.net.JarURLConnection.<init>(JarURLConnection.java:144)
>         at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:63)
>         at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:24)
>         at java.net.URL.openConnection(URL.java:945)
>         at java.net.URL.openStream(URL.java:1009)
>         at java.lang.ClassLoader.getSystemResourceAsStream(ClassLoader.java:1183)
>         at java.lang.Class.getResourceAsStream(Class.java:2028)
>         at sun.text.normalizer.ICUData.getStream(ICUData.java:43)
>         at sun.text.normalizer.ICUData.getRequiredStream(ICUData.java:63)
>         at sun.text.normalizer.NormalizerImpl.<init>(NormalizerImpl.java:243)
>         at sun.text.normalizer.NormalizerImpl.<clinit>(NormalizerImpl.java:40)
>         at sun.text.normalizer.NormalizerBase.decompose(NormalizerBase.java:707)
>         at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(NormalizerBase.java:348)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1592)
>         at sun.text.normalizer.NormalizerBase.normalize(NormalizerBase.java:1573)
>         at java.text.Normalizer.normalize(Normalizer.java:146)
>         at sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:986)
>         at sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:430)
>         at sun.security.x509.RDN.toRFC2253String(RDN.java:409)
>         at sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:714)
>         at sun.security.x509.X500Name.equals(X500Name.java:400)
>         at sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:609)
>         at sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:202)
>         at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:328)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
>         at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
>         at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:199)
>         at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
>         at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
>         at java.util.jar.JarVerifier.update(JarVerifier.java:188)
>         at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
>         at java.util.jar.JarFile.getInputStream(JarFile.java:386)
>         - locked <0xa00f2c60> (a java.util.jar.JarFile)
>         at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
>         at sun.misc.Resource.cachedInputStream(Resource.java:59)
>         - locked <0xa00f3530> (a sun.misc.URLClassPath$JarLoader$2)
>         at sun.misc.Resource.getByteBuffer(Resource.java:154)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
>         at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>         - locked <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:234)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
>         at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
>         - locked <0xa05078d8> (a sun.misc.Launcher$AppClassLoader)
>         at sun.security.jca.ProviderList.getProvider(ProviderList.java:215)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:130)
>         at sun.security.jca.ProviderList$3.get(ProviderList.java:125)
>         at java.util.AbstractList$Itr.next(AbstractList.java:345)
>         at java.security.SecureRandom.getPrngAlgorithm(SecureRandom.java:522)
>         at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:165)
>         at java.security.SecureRandom.<init>(SecureRandom.java:133)
>         at org.apache.felix.cm.impl.ConfigurationManager.createPid(ConfigurationManager.java:787)
>         at org.apache.felix.cm.impl.ConfigurationManager.createFactoryConfiguration(ConfigurationManager.java:357)
>         at org.apache.felix.cm.impl.ConfigurationAdminImpl.createFactoryConfiguration(ConfigurationAdminImpl.java:85)
>         at org.apache.felix.fileinstall.DirectoryWatcher.getConfiguration(DirectoryWatcher.java:294)
>         at org.apache.felix.fileinstall.DirectoryWatcher.setConfig(DirectoryWatcher.java:232)
>         at org.apache.felix.fileinstall.DirectoryWatcher.doConfigs(DirectoryWatcher.java:162)
>         at org.apache.felix.fileinstall.DirectoryWatcher.run(DirectoryWatcher.java:121)
> "Configuration Updater":
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
>         - waiting to lock <0xa050bd68> (a sun.misc.Launcher$ExtClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
>         - locked <0xa0518300> (a java.net.URLClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:480)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
>         at org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1434)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>         - locked <0xa0a5ef58> (a org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader)
>         at org.apache.felix.cm.impl.ConfigurationManager.getPersistenceManagers(ConfigurationManager.java:568)
>         at org.apache.felix.cm.impl.ConfigurationManager.getFactory(ConfigurationManager.java:677)
>         at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1014)
>         at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
> Found 1 deadlock.
> I tried to reproduce the issue using a simple program, but I could not. But, I am able to reproduce the issue in my environment, where I use GlassFish application server which runs on Felix and uses fileinstall.
> I understand this deadlock has to do with "deadlock observed in Sun JVM during parallel classloading," given that the threads involved are Felix threads, can we put any workaround in exercised code path to avoid this deadlock?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.