JetBrains / lincheck

Framework for testing concurrent data structures
Mozilla Public License 2.0
575 stars 33 forks source link

The execution has hung #355

Open de-shyt opened 1 month ago

de-shyt commented 1 month ago

The code is stored here. The problem appears when modelCheckingTest() is run in Debug using Lincheck plugin.

WARNING: A Java agent has been loaded dynamically (/Users/Daria.Shutina/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.14.12/be4984cb6fd1ef1d11f218a648889dfda44b8a15/byte-buddy-agent-1.14.12.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
= The execution has hung, see the thread dump =
| ---------------------------------------------------------------------------- |
|         Thread 1         |           Thread 2            |     Thread 3      |
| ---------------------------------------------------------------------------- |
| send(3) + cancel: <hung> | receive() + cancel: CANCELLED | receive(): <hung> |
|                          | receive(): <hung>             |                   |
| ---------------------------------------------------------------------------- |

Thread-Lincheck-RendezvousChannelTest-0:
    java.util.concurrent.ConcurrentHashMap.transfer(ConcurrentHashMap.java:2484)
    java.util.concurrent.ConcurrentHashMap.addCount(ConcurrentHashMap.java:2354)
    java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1776)
    java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:244)
    sun.instrument.TransformerManager.transform(TransformerManager.java:188)
    sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:610)
    sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
    sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:225)
    sun.nio.ch.lincheck.Injections.beforeMethodCall(Injections.java:249)
    com.deshyt.RendezvousChannel.tryResumeRequest(RendezvousChannel.kt:160)
    com.deshyt.RendezvousChannel.tryMakeRendezvous(RendezvousChannel.kt:123)
    com.deshyt.RendezvousChannel.updateCellOnSend(RendezvousChannel.kt:53)
    com.deshyt.RendezvousChannel.send(RendezvousChannel.kt:43)
    com.deshyt.ChannelTestBase.send(ChannelTestBase.kt:21)
    java.lang.Thread.runWith(Thread.java:1596)
    java.lang.Thread.run(Thread.java:1583)
Thread-Lincheck-RendezvousChannelTest-1:
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategy.awaitTurn(ManagedStrategy.kt:1787)
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategy.switchCurrentThread(ManagedStrategy.kt:502)
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategy.switchCurrentThread$default(ManagedStrategy.kt:493)
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategy.afterCoroutineSuspended$lincheck(ManagedStrategy.kt:1016)
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategyRunner.afterCoroutineSuspended(ManagedStrategy.kt:1552)
    org.jetbrains.kotlinx.lincheck.runner.ParallelThreadsRunner.waitAndInvokeFollowUp(ParallelThreadsRunner.kt:239)
    org.jetbrains.kotlinx.lincheck.runner.ParallelThreadsRunner.processInvocationResult(ParallelThreadsRunner.kt:224)
    org.jetbrains.kotlinx.lincheck.runner.TestThreadExecution4.run(Unknown Source)
    org.jetbrains.kotlinx.lincheck.runner.FixedActiveThreadsExecutor.testThreadRunnable$lambda$10(FixedActiveThreadsExecutor.kt:174)
    org.jetbrains.kotlinx.lincheck.runner.FixedActiveThreadsExecutor$$Lambda/0x000000b00120c000.run(Unknown Source)
    java.lang.Thread.runWith(Thread.java:1596)
    java.lang.Thread.run(Thread.java:1583)
Thread-Lincheck-RendezvousChannelTest-2:
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategy.awaitTurn(ManagedStrategy.kt:1787)
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategy.switchCurrentThread(ManagedStrategy.kt:502)
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategy.switchCurrentThread$default(ManagedStrategy.kt:493)
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategy.afterCoroutineSuspended$lincheck(ManagedStrategy.kt:1016)
    org.jetbrains.kotlinx.lincheck.strategy.managed.ManagedStrategyRunner.afterCoroutineSuspended(ManagedStrategy.kt:1552)
    org.jetbrains.kotlinx.lincheck.runner.ParallelThreadsRunner.waitAndInvokeFollowUp(ParallelThreadsRunner.kt:239)
    org.jetbrains.kotlinx.lincheck.runner.ParallelThreadsRunner.processInvocationResult(ParallelThreadsRunner.kt:224)
    org.jetbrains.kotlinx.lincheck.runner.TestThreadExecution5.run(Unknown Source)
    org.jetbrains.kotlinx.lincheck.runner.FixedActiveThreadsExecutor.testThreadRunnable$lambda$10(FixedActiveThreadsExecutor.kt:174)
    org.jetbrains.kotlinx.lincheck.runner.FixedActiveThreadsExecutor$$Lambda/0x000000b00120c000.run(Unknown Source)
    java.lang.Thread.runWith(Thread.java:1596)
    java.lang.Thread.run(Thread.java:1583)

Check failed.
java.lang.IllegalStateException: Check failed.
    at org.jetbrains.kotlinx.lincheck.LinChecker.runReplayForPlugin(LinChecker.kt:133)
    at org.jetbrains.kotlinx.lincheck.LinChecker.checkImpl(LinChecker.kt:114)
    at org.jetbrains.kotlinx.lincheck.LinChecker.checkImpl$lincheck(LinChecker.kt:65)
    at org.jetbrains.kotlinx.lincheck.LinChecker.check(LinChecker.kt:47)
    at org.jetbrains.kotlinx.lincheck.LinChecker$Companion.check(LinChecker.kt:195)
    at org.jetbrains.kotlinx.lincheck.LinCheckerKt.check(LinChecker.kt:295)
    at org.jetbrains.kotlinx.lincheck.LinCheckerKt.check(LinChecker.kt:304)
    at com.deshyt.TestBase.modelCheckingTest(Unknown Source)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
    at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:119)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:66)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

Idea version: 2024.1.6 Lincheck version: 2.33 Plugin version: 0.5

ndkoval commented 1 week ago

Hi @de-shyt, could you please check whether the problem is fixed in Lincheck 2.34?

de-shyt commented 1 week ago

Yes, it works now