[jboss-jira] [JBoss JIRA] (DROOLS-890) Thread deadlock issue in class ProjectClassLoader.java

Thomas Leung (JIRA) issues at jboss.org
Thu Sep 17 04:39:00 EDT 2015


    [ https://issues.jboss.org/browse/DROOLS-890?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13109788#comment-13109788 ] 

Thomas Leung commented on DROOLS-890:
-------------------------------------

Sorry for late reply. I mentioned ClassNotFoundException because as my reply on 04/Sep/15 10:50 AM said, the deadlock happened after ClassNotFoundException is detected in org.drools.core.common.ProjectClassLoader.java:284. In this line, the method tries to lock 

        protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
            try {
                return loadType(name, resolve);
            } catch (ClassNotFoundException cnfe) {    <== it must throw ClassNotFoundException here and then reach line 284
                synchronized(projectClassLoader) {     <== wait for lock projectClassLoader
                    try {
                        return projectClassLoader.internalLoadClass(name, resolve);           // line 284
                    } catch (ClassNotFoundException cnfe2) {
                        return projectClassLoader.tryDefineType(name, cnfe);
                    }
                }
            }
        }

Here is the stacks, forgive my masking our part:

"CacheWorker:48" id=538 State:DEADLOCKED
	at org.drools.core.common.ProjectClassLoader$InternalTypesClassLoader.loadClass(ProjectClassLoader.java:284)
	-  waiting to lock org.drools.core.common.ProjectClassLoader at 28572e93 owned by:"CacheWorker:31" id=521
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at ......(Masked)......
	at ConditionEvaluator86102d62aa004ffa871398c07ca154fa.evaluate(Unknown Source)
	at org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:216)
	at org.drools.core.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:173)
	at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
	at org.drools.core.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:502)
	at org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:387)
	at org.drools.core.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:288)
	at org.drools.core.reteoo.EntryPointNode.assertObject(EntryPointNode.java:251)
	at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:367)
	at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:286)
	at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:139)
	at org.drools.core.command.runtime.rule.InsertElementsCommand.execute(InsertElementsCommand.java:93)
	at org.drools.core.command.runtime.rule.InsertElementsCommand.execute(InsertElementsCommand.java:40)
	at org.drools.core.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:155)
	at org.drools.core.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:76)
	at org.drools.core.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:321)
	at ......(Masked)......
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$Storage.invoke(PartitionedCache.CDB:10)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache.onInvokeRequest(PartitionedCache.CDB:38)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$InvokeRequest.run(PartitionedCache.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(DaemonPool.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(DaemonPool.CDB:32)
	at com.tangosol.coherence.component.util.DaemonPool$Daemon.onNotify(DaemonPool.CDB:66)
	at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:51)
	at java.lang.Thread.run(Thread.java:724)

	Locked synchronizers:
	java.util.concurrent.locks.ReentrantLock$NonfairSync at 1ed66b58
	java.util.concurrent.locks.ReentrantLock$NonfairSync at 20ba2cd9

"CacheWorker:31" id=521 State:DEADLOCKED
	at java.lang.ClassLoader.loadClass(ClassLoader.java:404)
	-  waiting to lock org.drools.core.common.ProjectClassLoader$InternalTypesClassLoader at 74793783 owned by:"CacheWorker:48" id=538
	at org.drools.core.common.ProjectClassLoader$InternalTypesClassLoader.loadType(ProjectClassLoader.java:293)
	at org.drools.core.common.ProjectClassLoader$InternalTypesClassLoader.access$200(ProjectClassLoader.java:258)
	at org.drools.core.common.ProjectClassLoader.loadType(ProjectClassLoader.java:140)
	at org.drools.core.common.ProjectClassLoader.loadClass(ProjectClassLoader.java:115)
	-  locked org.drools.core.common.ProjectClassLoader at 28572e93
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at org.drools.core.base.ClassFieldAccessorCache.getClass(ClassFieldAccessorCache.java:121)
	at org.drools.core.base.ClassFieldAccessorCache.getClassObjectType(ClassFieldAccessorCache.java:45)
	at org.drools.core.reteoo.ClassObjectTypeConf.<init>(ClassObjectTypeConf.java:85)
	at org.drools.core.common.ObjectTypeConfigurationRegistry.getObjectTypeConf(ObjectTypeConfigurationRegistry.java:72)
	at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:171)
	at org.drools.core.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:1430)
	at org.drools.core.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:222)
	at org.drools.core.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:216)
	at ......(Masked)......
	at org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1046)
	-  locked org.drools.core.common.DefaultAgenda at 7f928335
	at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:152)
	at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:94)
	-  locked org.drools.core.phreak.RuleExecutor at 794de699
	at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:964)
	at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1234)
	at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1239)
	at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1222)
	at org.drools.core.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:104)
	at org.drools.core.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:32)
	at org.drools.core.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:155)
	at org.drools.core.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:76)
	at org.drools.core.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:321)
	at ......(Masked)......
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$Storage.invoke(PartitionedCache.CDB:10)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache.onInvokeRequest(PartitionedCache.CDB:38)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$InvokeRequest.run(PartitionedCache.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(DaemonPool.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(DaemonPool.CDB:32)
	at com.tangosol.coherence.component.util.DaemonPool$Daemon.onNotify(DaemonPool.CDB:66)
	at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:51)
	at java.lang.Thread.run(Thread.java:724)

	Locked synchronizers:
	java.util.concurrent.locks.ReentrantLock$NonfairSync at 695e8506

> Thread deadlock issue in class ProjectClassLoader.java 
> -------------------------------------------------------
>
>                 Key: DROOLS-890
>                 URL: https://issues.jboss.org/browse/DROOLS-890
>             Project: Drools
>          Issue Type: Bug
>          Components: core engine
>    Affects Versions: 6.1.0.Final
>            Reporter: Vivek Hingorani
>            Assignee: Mario Fusco
>             Fix For: 6.3.0.Final
>
>
> In our project , we are using drools6.1.0.Final jars and the rules are deployed in a jar. Another application when trying to use the rules jar is getting thread deadlock problem. Stack trace is 
> at org.drools.core.common.ProjectClassLoader$InternalTypesClassLoader.loadClass(ProjectClassLoader,java284)
> Two threads are in deadlock condition on this thread. I restarted the application and the error is gone but we need to fix this issue so that it is not reproduced later.The class is in drools-core jar



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jboss-jira mailing list