Out of curiousity, what class loader is using to define org.apache.river.api.security.CombinerSecurityManager?
Mandy > On Feb 7, 2016, at 1:54 AM, Peter <j...@zeus.net.au> wrote: > > Thanks Peter & David, > > That's good to know. > > I've altered the SecurityManager to perform a permission check prior to > becoming the security manager, this ensures the cache has been created, to > avoid any recursive deadlock prone calls. > > The class that both threads are attempting to load and init is called > org.apache.river.concurrent.ReferenceIterator. > > The code can be found here: > > https://github.com/pfirmstone/river-internet/tree/Input-validation-for-Serialization > > Cheers, > > Peter. > > > On 7/02/2016 6:37 PM, Peter Levart wrote: >> >> >> On 02/06/2016 10:32 PM, Peter wrote: >>> The 0x040ebee8 monitor is most likely being held by native code. >>> >>> Regards, >>> >>> Peter Firmstone. >> >> Ok, but where? The deadlock report says it is held by main thread. Somewhere >> between the following two java frames? >> >> "main" #1 prio=5 os_prio=0 tid=0x017cf400 nid=0x1284 waiting for monitor >> entry [0x0185e000] >> ... >> ... >> at java.lang.ClassLoader.loadClass(ClassLoader.java:357) >> --here-- >> at >> org.apache.river.concurrent.ReferenceCollection.iterator(ReferenceCollection.java:124) >> >> >> As I understand this is where JVM resolves some class that for the 1st time >> while ReferenceCollection.iterator is being executed. So before calling-back >> into ClassLoader.loadClass, it acquires a monitor lock on some int[] object? >> >> >> Anyway. Looking at the following part of Thread-1 stacktrace: >> >> at >> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:202) >> at >> java.net.NetworkInterface.getHardwareAddress(NetworkInterface.java:447) >> at >> java.util.concurrent.ThreadLocalRandom.initialSeed(ThreadLocalRandom.java:158) >> at >> java.util.concurrent.ThreadLocalRandom.<clinit>(ThreadLocalRandom.java:137) >> at >> java.util.concurrent.ConcurrentHashMap.fullAddCount(ConcurrentHashMap.java:2526) >> at >> java.util.concurrent.ConcurrentHashMap.addCount(ConcurrentHashMap.java:2266) >> at >> java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1070) >> at >> java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535) >> >> ...I can see you are using some early release of JDK 8 where >> ThreadLocalRandom initialization involved obtaining a hardware address of >> some interface. This in turn checks for security manager. Since JDK 8u45 >> this code has been removed and only current time is used to derive initial >> seed, so you might not see this deadlock any more with JDK 8u45 and later. >> >> Regards, Peter >> >>> >>> >>> On 7/02/2016 4:27 AM, Peter Levart wrote: >>>> >>>> >>>> On 02/06/2016 01:17 PM, Peter Firmstone wrote: >>>>> The security manager is non blocking, unfortunately java system classes >>>>> aren't. >>>> >>>> It doesn't seem so. At least, I can't find where main thread locks the >>>> 0x040ebee8 monitor: >>>> >>>> "Thread-1": >>>> waiting to lock monitor 0x142766ac (object 0x040ebee8, a [I), >>>> which is held by "main" >>>> >>>> >>>> "main" #1 prio=5 os_prio=0 tid=0x017cf400 nid=0x1284 waiting for monitor >>>> entry [0x0185e000] >>>> java.lang.Thread.State: BLOCKED (on object monitor) >>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:406) >>>> - waiting to lock <0x03f624b8> (a java.lang.Object) >>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) >>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:357) >>>> at >>>> org.apache.river.concurrent.ReferenceCollection.iterator(ReferenceCollection.java:124) >>>> at >>>> org.apache.river.concurrent.ReferenceSet.hashCode(ReferenceSet.java:65) >>>> at >>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:44) >>>> at >>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:57) >>>> at >>>> org.apache.river.concurrent.ReferenceFactory.create(ReferenceFactory.java:64) >>>> at >>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:128) >>>> at >>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:44) >>>> at >>>> org.apache.river.concurrent.ReferenceMap.wrapVal(ReferenceMap.java:244) >>>> at >>>> org.apache.river.concurrent.ReferenceConcurrentMap.putIfAbsent(ReferenceConcurrentMap.java:68) >>>> at >>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:261) >>>> at >>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:202) >>>> at java.lang.System.checkIO(System.java:253) >>>> at java.lang.System.setErr(System.java:199) >>>> at org.apache.river.qa.harness.MasterTest.main(MasterTest.java:84) >>>> >>>> >>>> ...no mention of 0x040ebee8 in main thread...?! >>>> >>>> Peter >>>> >>>>> >>>>> The policy provider in use thread confines PermissionCollection >>>>> instances, which never leave the cpu cache, they are discarded >>>>> immediately after use. >>>>> >>>>> The problem here is that two different threads are attempting to load the >>>>> same class at the same time. >>>>> >>>>> I'll have to make sure that all classes are loaded before the security >>>>> manager becomes the system security manager, either that or eliminate the >>>>> AccessControlContext check permission cache. >>>>> >>>>> While the standard java security manager and policy provider consume >>>>> around 10% cpu, this consumes less than 1%. >>>>> >>>>> On 6/02/2016 9:57 PM, David Holmes wrote: >>>>>> On 6/02/2016 9:39 PM, Peter Firmstone wrote: >>>>>>> Hmm, thought the new parallel lock stategy in ClassLoader wasn't >>>>>>> deadlock prone? Guess I was wrong. >>>>>> >>>>>> The deadlock is introduced by a custom security manager. SM's play a >>>>>> critical role in many parts of the core libraries so if they utilize >>>>>> synchronization then they can easily introduce deadlock. >>>>>> >>>>>>> Observation: On an unrelated occassion, I had a URLClassLoader >>>>>>> synchronization hotspot (well not standard URLClassLoader, but a high >>>>>>> performance RFC3986 URL ClassLoader, that use normalized RFC3986 URI >>>>>>> instead of URL DNS lookup), I solved that problem by thread confining >>>>>>> class loading. I've never experienced deadlock using thread >>>>>>> confinement, initially I was worried that there would be >>>>>>> interdependencies, however I didn't experience a problem, as the single >>>>>>> thread would always load the classes it needed. >>>>>>> >>>>>>> I'm wondering if multiple locks for ClassLoader's might be the wrong >>>>>>> strategy, I found thread confinement was very performant. >>>>>> >>>>>> Are you suggesting that a class-load request is actually transmitted to >>>>>> a single class-loading thread, while the initial thread blocks until the >>>>>> loading is complete? That would still seem prone to the same SM related >>>>>> deadlock scenario. And it would not generally be particularly performant. >>>>> >>>>> I thought that too, until I tried it. >>>>> >>>>> Would you like to see some performance figures? >>>>> >>>>> Cheers, >>>>> >>>>> Peter. >>>>> >>>>>> >>>>>> David >>>>>> >>>>>>> Regards, >>>>>>> >>>>>>> Peter. >>>>>>> >>>>>>> 2016-02-06 21:06:07 >>>>>>> Full thread dump Java HotSpot(TM) Client VM (25.0-b70 mixed mode): >>>>>>> >>>>>>> "Service Thread" #9 daemon prio=9 os_prio=0 tid=0x14387400 nid=0xc54 >>>>>>> runnable [0x00000000] >>>>>>> java.lang.Thread.State: RUNNABLE >>>>>>> >>>>>>> "C1 CompilerThread0" #8 daemon prio=9 os_prio=2 tid=0x14332c00 >>>>>>> nid=0x111c waiting on condition [0x00000000] >>>>>>> java.lang.Thread.State: RUNNABLE >>>>>>> >>>>>>> "Attach Listener" #7 daemon prio=5 os_prio=2 tid=0x14331c00 nid=0x13d8 >>>>>>> waiting on condition [0x00000000] >>>>>>> java.lang.Thread.State: RUNNABLE >>>>>>> >>>>>>> "Signal Dispatcher" #6 daemon prio=9 os_prio=2 tid=0x14331400 nid=0x10b8 >>>>>>> runnable [0x00000000] >>>>>>> java.lang.Thread.State: RUNNABLE >>>>>>> >>>>>>> "Thread-1" #5 prio=10 os_prio=2 tid=0x14318800 nid=0x4a8 waiting for >>>>>>> monitor entry [0x03ded000] >>>>>>> java.lang.Thread.State: BLOCKED (on object monitor) >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceCollection.iterator(ReferenceCollection.java:124) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceSet.hashCode(ReferenceSet.java:65) >>>>>>> at >>>>>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:44) >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:57) >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceFactory.create(ReferenceFactory.java:64) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:128) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:44) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceMap.wrapVal(ReferenceMap.java:244) >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceConcurrentMap.putIfAbsent(ReferenceConcurrentMap.java:68) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:261) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:202) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.net.NetworkInterface.getHardwareAddress(NetworkInterface.java:447) >>>>>>> at >>>>>>> java.util.concurrent.ThreadLocalRandom.initialSeed(ThreadLocalRandom.java:158) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ThreadLocalRandom.<clinit>(ThreadLocalRandom.java:137) >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ConcurrentHashMap.fullAddCount(ConcurrentHashMap.java:2526) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ConcurrentHashMap.addCount(ConcurrentHashMap.java:2266) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1070) >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:463) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:404) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:411) >>>>>>> - locked <0x03f624b8> (a java.lang.Object) >>>>>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:357) >>>>>>> at >>>>>>> org.cliffc.high_scale_lib.NonBlockingHashMap$SnapshotK.<init>(NonBlockingHashMap.java:1167) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.cliffc.high_scale_lib.NonBlockingHashMap$2.iterator(NonBlockingHashMap.java:1200) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor$EnqueGarbageTask.run(ReferenceProcessor.java:166) >>>>>>> >>>>>>> >>>>>>> - locked <0x03ef8b30> (a >>>>>>> org.cliffc.high_scale_lib.NonBlockingHashMap) >>>>>>> at >>>>>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) >>>>>>> at >>>>>>> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) >>>>>>> at >>>>>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.j >>>>>>> >>>>>>> >>>>>>> ava:180) >>>>>>> at >>>>>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294 >>>>>>> >>>>>>> >>>>>>> ) >>>>>>> at >>>>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) >>>>>>> >>>>>>> >>>>>>> at java.lang.Thread.run(Thread.java:744) >>>>>>> >>>>>>> "Finalizer" #3 daemon prio=8 os_prio=1 tid=0x14277800 nid=0x15cc in >>>>>>> Object.wait() [0x03cff000] >>>>>>> java.lang.Thread.State: WAITING (on object monitor) >>>>>>> at java.lang.Object.wait(Native Method) >>>>>>> - waiting on <0x03e056d8> (a java.lang.ref.ReferenceQueue$Lock) >>>>>>> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142) >>>>>>> - locked <0x03e056d8> (a java.lang.ref.ReferenceQueue$Lock) >>>>>>> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:158) >>>>>>> at >>>>>>> java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) >>>>>>> >>>>>>> "Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x14271c00 >>>>>>> nid=0x1398 in Object.wait() [0x144cf000] >>>>>>> java.lang.Thread.State: WAITING (on object monitor) >>>>>>> at java.lang.Object.wait(Native Method) >>>>>>> - waiting on <0x03e05200> (a java.lang.ref.Reference$Lock) >>>>>>> at java.lang.Object.wait(Object.java:502) >>>>>>> at >>>>>>> java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157) >>>>>>> - locked <0x03e05200> (a java.lang.ref.Reference$Lock) >>>>>>> >>>>>>> "main" #1 prio=5 os_prio=0 tid=0x017cf400 nid=0x1284 waiting for monitor >>>>>>> entry [0x0185e000] >>>>>>> java.lang.Thread.State: BLOCKED (on object monitor) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:406) >>>>>>> - waiting to lock <0x03f624b8> (a java.lang.Object) >>>>>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:357) >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceCollection.iterator(ReferenceCollection.java:124) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceSet.hashCode(ReferenceSet.java:65) >>>>>>> at >>>>>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:44) >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:57) >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceFactory.create(ReferenceFactory.java:64) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:128) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:44) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceMap.wrapVal(ReferenceMap.java:244) >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceConcurrentMap.putIfAbsent(ReferenceConcurrentMap.java:68) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:261) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:202) >>>>>>> >>>>>>> >>>>>>> at java.lang.System.checkIO(System.java:253) >>>>>>> at java.lang.System.setErr(System.java:199) >>>>>>> at >>>>>>> org.apache.river.qa.harness.MasterTest.main(MasterTest.java:84) >>>>>>> >>>>>>> "VM Thread" os_prio=2 tid=0x1426e400 nid=0x16a8 runnable >>>>>>> >>>>>>> "VM Periodic Task Thread" os_prio=2 tid=0x14388400 nid=0x17a8 waiting on >>>>>>> condition >>>>>>> >>>>>>> JNI global references: 19 >>>>>>> >>>>>>> >>>>>>> Found one Java-level deadlock: >>>>>>> ============================= >>>>>>> "Thread-1": >>>>>>> waiting to lock monitor 0x142766ac (object 0x040ebee8, a [I), >>>>>>> which is held by "main" >>>>>>> "main": >>>>>>> waiting to lock monitor 0x14274a3c (object 0x03f624b8, a >>>>>>> java.lang.Object), >>>>>>> which is held by "Thread-1" >>>>>>> >>>>>>> Java stack information for the threads listed above: >>>>>>> =================================================== >>>>>>> "Thread-1": >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceCollection.iterator(ReferenceCollection.java:124) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceSet.hashCode(ReferenceSet.java:65) >>>>>>> at >>>>>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:44) >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:57) >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceFactory.create(ReferenceFactory.java:64) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:128) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:44) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceMap.wrapVal(ReferenceMap.java:244) >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceConcurrentMap.putIfAbsent(ReferenceConcurrentMap.java:68) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:261) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:202) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.net.NetworkInterface.getHardwareAddress(NetworkInterface.java:447) >>>>>>> at >>>>>>> java.util.concurrent.ThreadLocalRandom.initialSeed(ThreadLocalRandom.java:158) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ThreadLocalRandom.<clinit>(ThreadLocalRandom.java:137) >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ConcurrentHashMap.fullAddCount(ConcurrentHashMap.java:2526) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ConcurrentHashMap.addCount(ConcurrentHashMap.java:2266) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1070) >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:463) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:404) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:411) >>>>>>> - locked <0x03f624b8> (a java.lang.Object) >>>>>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:357) >>>>>>> at >>>>>>> org.cliffc.high_scale_lib.NonBlockingHashMap$SnapshotK.<init>(NonBlockingHashMap.java:1167) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.cliffc.high_scale_lib.NonBlockingHashMap$2.iterator(NonBlockingHashMap.java:1200) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor$EnqueGarbageTask.run(ReferenceProcessor.java:166) >>>>>>> >>>>>>> >>>>>>> - locked <0x03ef8b30> (a >>>>>>> org.cliffc.high_scale_lib.NonBlockingHashMap) >>>>>>> at >>>>>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) >>>>>>> at >>>>>>> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) >>>>>>> at >>>>>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.j >>>>>>> >>>>>>> >>>>>>> ava:180) >>>>>>> at >>>>>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294 >>>>>>> >>>>>>> >>>>>>> ) >>>>>>> at >>>>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) >>>>>>> >>>>>>> >>>>>>> at java.lang.Thread.run(Thread.java:744) >>>>>>> "main": >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:406) >>>>>>> - waiting to lock <0x03f624b8> (a java.lang.Object) >>>>>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:357) >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceCollection.iterator(ReferenceCollection.java:124) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceSet.hashCode(ReferenceSet.java:65) >>>>>>> at >>>>>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:44) >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.StrongReference.<init>(StrongReference.java:57) >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceFactory.create(ReferenceFactory.java:64) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:128) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceProcessor.referenced(ReferenceProcessor.java:44) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceMap.wrapVal(ReferenceMap.java:244) >>>>>>> at >>>>>>> org.apache.river.concurrent.ReferenceConcurrentMap.putIfAbsent(ReferenceConcurrentMap.java:68) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:261) >>>>>>> >>>>>>> >>>>>>> at >>>>>>> org.apache.river.api.security.CombinerSecurityManager.checkPermission(CombinerSecurityManager.java:202) >>>>>>> >>>>>>> >>>>>>> at java.lang.System.checkIO(System.java:253) >>>>>>> at java.lang.System.setErr(System.java:199) >>>>>>> at >>>>>>> org.apache.river.qa.harness.MasterTest.main(MasterTest.java:84) >>>>>>> >>>>>>> Found 1 deadlock. >>>>> >>>> >>>> >>>> _______________________________________________ >>>> Concurrency-interest mailing list >>>> concurrency-inter...@cs.oswego.edu >>>> http://cs.oswego.edu/mailman/listinfo/concurrency-interest >>> >> > > _______________________________________________ > Concurrency-interest mailing list > concurrency-inter...@cs.oswego.edu > http://cs.oswego.edu/mailman/listinfo/concurrency-interest