harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Elena Semukhina (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-2982) [classlib][net ] java.net.URLClassLoader implementation is not thread safe.
Date Wed, 14 Feb 2007 11:51:05 GMT

    [ https://issues.apache.org/jira/browse/HARMONY-2982?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12473052
] 

Elena Semukhina commented on HARMONY-2982:
------------------------------------------

This is reasonable and works properly. 

I still doubt on necessity of wrapping resCache with Collections.synchronizedMap(). Are there
any strong pros for that from your point?

Could we avoid this and synchronize on resCache in the following way (another 'mixed' approach
:)

if (jf == null) { 
    synchronized (resCache) { 
        // Check the cache again in case another thread updated it while we're waiting on
lock
        jf = resCache.get(thisURL); 

        if (jf == null) { 
            // The code goes here... 
            ... 
        } 
    } 
} 


> [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, H-2982_1.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.


Mime
View raw message