You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Elena Semukhina (JIRA)" <ji...@apache.org> on 2007/02/07 14:03:07 UTC
[jira] Commented: (HARMONY-2982) [classlib][net ]
java.net.URLClassLoader implementation is not thread safe.
[ https://issues.apache.org/jira/browse/HARMONY-2982?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12470949 ]
Elena Semukhina commented on HARMONY-2982:
------------------------------------------
More thorough investigation on Mikhail 's 2) suggestion showed that we need block synchronization suggested in the patch. Otherwise each thread which gets jf == null for some URL does the same job on openConnection(), getJarFile() and eventual put() a JarFile to resCache and this actually decreases the performance. Block synchronization ensures that we do this job once for each JarFile.
I run the classloader.StressLoader test on an unpatched build and see stable hang in a deadlock on Windows 2CPUx4 core machine. Threads are locked while doing the same job somewhere in org/apache/harmony/luni/internal/net/www/protocol/jar/JarURLConnection.findJarFile().
> [classlib][net ] java.net.URLClassLoader implementation is not thread safe.
> ---------------------------------------------------------------------------
>
> Key: HARMONY-2982
> URL: https://issues.apache.org/jira/browse/HARMONY-2982
> Project: Harmony
> Issue Type: Bug
> Components: Classlib
> Reporter: Elena Semukhina
> Attachments: H-2982.patch
>
>
> The DRLVM smoke test classloader.StressLoader fails intermittently on both Linux and Windows.
> To reproduce the failure you should run the test iteratively in the following way:
> while true; do $DRLVM -cp <path to smoke test classes> classloader.StressLoader; done
> I observe two sorts of intermittent failures:
> 1. java.lang.NullPointerException
> at java.net.URLClassLoader.explore(URLClassLoader.java:1200)
> at java.net.URLClassLoader.findResourceImpl(URLClassLoader.java:809)
> at java.net.URLClassLoader$5.run(URLClassLoader.java:667)
> at java.net.URLClassLoader$5.run(URLClassLoader.java)
> at java.security.AccessController.doPrivilegedImpl(Unknown Source)
> at java.security.AccessController.doPrivileged(Unknown Source)
> at java.net.URLClassLoader.findResource(URLClassLoader.java:665)
> at java.lang.ClassLoader$BootstrapLoader.findResource(Unknown Source)
> at java.lang.ClassLoader.getResource(Unknown Source)
> at java.lang.ClassLoader.getResourceAsStream(Unknown Source)
> at java.lang.ClassLoader.getSystemResourceAsStream(Unknown Source)
> at classloader.LogLoader.loadClass(Unknown Source)
> at classloader.StressLoader.run(Unknown Source)
> 2. java.lang.ArrayIndexOutOfBoundsException
> at java.util.IdentityHashMap.rehash(IdentityHashMap.java:501)
> at java.util.IdentityHashMap.put(IdentityHashMap.java:463)
> at java.net.URLClassLoader.findResourceImpl(URLClassLoader.java:720)
> at java.net.URLClassLoader$5.run(URLClassLoader.java:667)
> at java.net.URLClassLoader$5.run(URLClassLoader.java)
> at java.security.AccessController.doPrivilegedImpl(Unknown Source)
> at java.security.AccessController.doPrivileged(Unknown Source)
> at java.net.URLClassLoader.findResource(URLClassLoader.java:665)
> at java.lang.ClassLoader$BootstrapLoader.findResource(Unknown Source)
> at java.lang.ClassLoader.getResource(Unknown Source)
> at java.lang.ClassLoader.getResourceAsStream(Unknown Source)
> at java.lang.ClassLoader.getSystemResourceAsStream(Unknown Source)
> at classloader.LogLoader.loadClass(Unknown Source)
> at classloader.StressLoader.run(Unknown Source)
> java.lang.ArrayIndexOutOfBoundsException
> at java.util.IdentityHashMap.rehash(IdentityHashMap.java:501)
> at java.util.IdentityHashMap.put(IdentityHashMap.java:463)
> at java.net.URLClassLoader.findResourceImpl(URLClassLoader.java:720)
> at java.net.URLClassLoader$5.run(URLClassLoader.java:667)
> at java.net.URLClassLoader$5.run(URLClassLoader.java)
> at java.security.AccessController.doPrivilegedImpl(Unknown Source)
> at java.security.AccessController.doPrivileged(Unknown Source)
> at java.net.URLClassLoader.findResource(URLClassLoader.java:665)
> at java.lang.ClassLoader$BootstrapLoader.findResource(Unknown Source)
> at java.lang.ClassLoader.getResource(Unknown Source)
> at java.lang.ClassLoader.getResourceAsStream(Unknown Source)
> at java.lang.ClassLoader.getSystemResourceAsStream(Unknown Source)
> at classloader.LogLoader.loadClass(Unknown Source)
> at classloader.StressLoader.run(Unknown Source)
> java.lang.ArrayIndexOutOfBoundsException
> at java.util.IdentityHashMap.rehash(IdentityHashMap.java:501)
> at java.util.IdentityHashMap.put(IdentityHashMap.java:463)
> at java.net.URLClassLoader.findResourceImpl(URLClassLoader.java:720)
> at java.net.URLClassLoader$5.run(URLClassLoader.java:667)
> at java.net.URLClassLoader$5.run(URLClassLoader.java)
> at java.security.AccessController.doPrivilegedImpl(Unknown Source)
> at java.security.AccessController.doPrivileged(Unknown Source)
> at java.net.URLClassLoader.findResource(URLClassLoader.java:665)
> at java.lang.ClassLoader$BootstrapLoader.findResource(Unknown Source)
> at java.lang.ClassLoader.getResource(Unknown Source)
> at java.lang.ClassLoader.getResourceAsStream(Unknown Source)
> at java.lang.ClassLoader.getSystemResourceAsStream(Unknown Source)
> at classloader.LogLoader.loadClass(Unknown Source)
> at classloader.StressLoader.run(Unknown Source)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.