Random IllegalArgumentException when a lot of objects are created
tylertian123 opened this issue · comments
Using this code to repeatedly run TankDriveTrajectoryTest
, the test usually fails after running less than 100 times:
int i = 0;
JUnitCore c = new JUnitCore();
Result r;
while((r = c.run(TankDriveTrajectoryTest.class)).wasSuccessful()) {
System.out.println(i++);
}
for(Failure f : r.getFailures()) {
System.out.println(f.toString());
f.getException().printStackTrace();
}
Stack trace:
java.lang.IllegalStateException: This object has already been freed
at com.arctos6135.robotpathfinder.core.trajectory.TankDriveTrajectory.totalTime(Native Method)
at com.arctos6135.robotpathfinder.tests.core.trajectory.TankDriveTrajectoryTest.testTankDriveTrajectoryMultipleMirroring(TankDriveTrajectoryTest.java:222)
at jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at org.junit.runner.JUnitCore.run(JUnitCore.java:105)
at org.junit.runner.JUnitCore.run(JUnitCore.java:94)
at DebugTests.main(DebugTests.java:97)
This seems to be caused by a bug in the GlobalLifeCycleManager
, since if the resource disposal threads are turned off, this problem doesn't seem to occur.
This problem might be caused by the JNI objects still remaining in the phantom reference queue of the GlobalLifeCycleManager
even after the free()
or close()
method is called.
Fixed in a6279aa.