[jboss-jira] [JBoss JIRA] (DROOLS-635) NPE thrown intermittently in multi-threading environment

John Le (JIRA) issues at jboss.org
Fri Oct 17 14:31:37 EDT 2014


John Le created DROOLS-635:
------------------------------

             Summary: NPE thrown intermittently in multi-threading environment
                 Key: DROOLS-635
                 URL: https://issues.jboss.org/browse/DROOLS-635
             Project: Drools
          Issue Type: Bug
    Affects Versions: 6.2.0.CR1, 6.2.0.Beta1, 6.1.0.Final
            Reporter: John Le
            Assignee: Mark Proctor


Below is the stacktrace for the NPE, it appears to be an issue when accumulate function is called under multi-threading condition. Please look at the remove function in the RightTupleIndexHashTable.java file. The remove function does not appear to have proper null checking around the "current" object.

   public void remove(final RightTuple rightTuple) {
        RightTupleList memory = rightTuple.getMemory();
        memory.remove( rightTuple );
        this.factSize--;
        if ( memory.first == null ) {
            final int index = indexOf( memory.hashCode(),
                                       this.table.length );
            RightTupleList previous = null;
            RightTupleList current = (RightTupleList) this.table[index];

            while ( current != memory ) {  
                previous = current;
                current = (RightTupleList) current.getNext();
            }

            if ( previous != null ) {
                previous.next = current.next;
            } else {
                this.table[index] = current.next;
            }
            this.size--;
        }
        rightTuple.clear();
    }


Stacktrace:
java.lang.NullPointerException
        org.drools.core.util.index.RightTupleIndexHashTable.remove(RightTupleIndexHashTable.java:389)
        org.drools.core.phreak.RuleNetworkEvaluator.doUpdatesReorderRightMemory(RuleNetworkEvaluator.java:855)
        org.drools.core.phreak.PhreakJoinNode.doNode(PhreakJoinNode.java:43)
        org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:548)
        org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:534)
        org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:334)
        org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:161)
        org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:116)
        org.drools.core.phreak.RuleExecutor.reEvaluateNetwork(RuleExecutor.java:230)
        org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:103)
        org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:988)
        org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1274)
        org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1284)
        org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1257)




--
This message was sent by Atlassian JIRA
(v6.3.1#6329)


More information about the jboss-jira mailing list