[jboss-jira] [JBoss JIRA] Created: (JBRULES-2821) Race condition in MVELDialect
Doug Pedrick (JIRA)
jira-events at lists.jboss.org
Tue Dec 7 12:26:02 EST 2010
Race condition in MVELDialect
-----------------------------
Key: JBRULES-2821
URL: https://jira.jboss.org/browse/JBRULES-2821
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-compiler
Affects Versions: 5.1.1.FINAL
Environment: JDK 1.6.0_20 Mac OS X 10.6.5
Reporter: Doug Pedrick
Assignee: Mark Proctor
Multiple threads loading different rulesets (each having local copies of KnowledgeBuilderConfiguration, KnowledgeBuilder, KnowledgeBaseConfiguration, and KnowledgeBase) can result in a race condition with the AbstractParser.OPERATIONS hash map in MVEL.
MVELDialect and MVELExprAnalyzer both invoke ExpressionCompiler.compile. MVELDialect.compile calls AbstractParser.setLanguageLevel which clears and reloads the OPERATIONS static HashMap. It does so while holding COMPILER_LOCK. MVELExprAnalyzer calls ExpressionCompiler.compile without holding COMPILER_LOCK, resulting in OPERATIONS sometimes being empty when called, causing an NPE when attempting to autobox an Operator Integer to primitive.
There are other areas in Drools code that ultimately depend on OPERATIONS and should be protected as well.
java.lang.NullPointerException
at org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:250)
at org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:68)
at org.drools.rule.builder.dialect.mvel.MVELExprAnalyzer.analyzeExpression(MVELExprAnalyzer.java:86)
at org.drools.rule.builder.dialect.mvel.MVELDialect.analyzeExpression(MVELDialect.java:461)
at org.drools.rule.builder.dialect.mvel.MVELDialect.analyzeExpression(MVELDialect.java:446)
at org.drools.rule.builder.dialect.mvel.MVELPredicateBuilder.build(MVELPredicateBuilder.java:50)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:654)
at org.drools.rule.builder.PatternBuilder.rewriteToEval(PatternBuilder.java:482)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:340)
at org.drools.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:264)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:213)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:108)
at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:43)
at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:79)
at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1154)
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:636)
at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:266)
at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:458)
at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:28)
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list