[jboss-jira] [JBoss JIRA] (DROOLS-4413) fireUntilHalt continues to block after session disposed
Jesse White (Jira)
issues at jboss.org
Fri Aug 9 09:40:00 EDT 2019
[ https://issues.jboss.org/browse/DROOLS-4413?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13769076#comment-13769076 ]
Jesse White commented on DROOLS-4413:
-------------------------------------
[~mfusco] thanks for taking the time to look at this. Good point.
I've changed the test to make sure `fireUntilHalt` is called before we halt the session.
{code:java}
// Create a dedicated thread to fire
KieSession kieSession = base.newKieSession();
CountDownLatch latch = new CountDownLatch(1);
Thread t = new Thread(() -> {
latch.countDown();
System.out.println("Firing.");
kieSession.fireUntilHalt();
System.out.println("Halted.");
});
t.start();
// Wait for the thread to start firing
latch.await();
Thread.sleep(250);
{code}
When I run the test in a loop, I can still reproduce the problem after about 30 runs or so. Stack for the thread looks like the following:
{noformat}
"Thread-14" #40 daemon prio=5 os_prio=0 tid=0x00007fa2c0085000 nid=0x154d3 in Object.wait() [0x00007fa3202aa000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000f125e8d0> (a java.lang.Object)
at java.lang.Object.wait(Object.java:502)
at org.drools.core.common.DefaultAgenda$ExecutionStateMachine.waitInactive(DefaultAgenda.java:1375)
at org.drools.core.common.DefaultAgenda$ExecutionStateMachine.waitAndEnterExecutionState(DefaultAgenda.java:1368)
at org.drools.core.common.DefaultAgenda$ExecutionStateMachine.toFireUntilHalt(DefaultAgenda.java:1336)
- locked <0x00000000f125e8d0> (a java.lang.Object)
at org.drools.core.common.DefaultAgenda$RestHandler$FireUntilHaltRestHandler.handleRest(DefaultAgenda.java:1139)
at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1074)
at org.drools.core.common.DefaultAgenda.internalFireUntilHalt(DefaultAgenda.java:991)
at org.drools.core.common.DefaultAgenda.fireUntilHalt(DefaultAgenda.java:983)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireUntilHalt(StatefulKnowledgeSessionImpl.java:1369)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireUntilHalt(StatefulKnowledgeSessionImpl.java:1348)
at org.drools.compiler.integrationtests.WhatsWrongWithMeTest.lambda$canReturnWhenHalted$0(WhatsWrongWithMeTest.java:81)
at org.drools.compiler.integrationtests.WhatsWrongWithMeTest$$Lambda$60/1688271262.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)
{noformat}
This is consistent with the behavior we've been seeing in 7.7.0.Final, which is what led us to start investigating this in the first place.
!intellij-test-failure.png|thumbnail!
> fireUntilHalt continues to block after session disposed
> -------------------------------------------------------
>
> Key: DROOLS-4413
> URL: https://issues.jboss.org/browse/DROOLS-4413
> Project: Drools
> Issue Type: Bug
> Affects Versions: 7.25.0.Final
> Environment: Local build of 7.24.0.Final with Oracle JDK 8
> Reporter: Jesse White
> Assignee: Mario Fusco
> Priority: Major
> Attachments: WhatsWrongWithMeTest.java, halt_log.txt, intellij-test-failure.png
>
>
> See attached test case that reproduces the problem.
> I'm expecting that a thread calling fireUntilHalt will exit after the session is halted and disposed, but it continues to block. If the code block that performs the marshalling is ignored, then the thread exists as expected.
> Stack is:
> {code:java}
> "Thread-1" #14 daemon prio=5 os_prio=0 tid=0x00007f5a7c683000 nid=0x1c028 in Object.wait() [0x00007f5acc170000]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x00000000ecfc67b0> (a org.drools.core.phreak.SynchronizedPropagationList)
> at java.lang.Object.wait(Object.java:502)
> at org.drools.core.phreak.SynchronizedPropagationList.waitOnRest(SynchronizedPropagationList.java:128)
> - locked <0x00000000ecfc67b0> (a org.drools.core.phreak.SynchronizedPropagationList)
> at org.drools.core.common.DefaultAgenda$RestHandler$FireUntilHaltRestHandler.handleRest(DefaultAgenda.java:1133)
> - locked <0x00000000ecfc67b0> (a org.drools.core.phreak.SynchronizedPropagationList)
> at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1074)
> at org.drools.core.common.DefaultAgenda.internalFireUntilHalt(DefaultAgenda.java:991)
> at org.drools.core.common.DefaultAgenda.fireUntilHalt(DefaultAgenda.java:983)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireUntilHalt(StatefulKnowledgeSessionImpl.java:1369)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireUntilHalt(StatefulKnowledgeSessionImpl.java:1348)
> at org.drools.compiler.integrationtests.WhatsWrongWithMeTest.lambda$canReturnWhenHalted$0(WhatsWrongWithMeTest.java:78)
> at org.drools.compiler.integrationtests.WhatsWrongWithMeTest$$Lambda$60/994541328.run(Unknown Source)
> at java.lang.Thread.run(Thread.java:748)
> {code}
--
This message was sent by Atlassian Jira
(v7.12.1#712002)
More information about the jboss-jira
mailing list