[CDO] ConcurrentHashMap NPE. [message #1857803] |
Sun, 26 February 2023 18:28  |
Eclipse User |
|
|
|
I was experimenting with read locks using the following sample code added as test to the InitialTest class:
public void testConcurrentHashMapException() throws Exception
{
CDOSession session = openSession();
disableConsole();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/test1"));
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
transaction.commit();
enableConsole();
CDOTransaction trx1 = session.openTransaction();
resource = trx1.getResource(getResourcePath("/test1"), true);
resource.cdoReadLock().lock(250);
CDOTransaction trx2 = session.openTransaction();
resource = trx2.getResource(getResourcePath("/test1"), true);
resource.cdoReadLock().lock(250);
trx1.unlockObjects();
trx1.close();
trx2.unlockObjects();
trx2.close();
}
When I execute this code, I get the following NPE:
org.eclipse.emf.cdo.tests.config.impl.ConfigTestException: Error in InitialTest.testConcurrentHashMapException [MEM-branching, JVM, Native]
at org.eclipse.emf.cdo.tests.config.impl.ConfigTest.runBare(ConfigTest.java:657)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:130)
at org.eclipse.net4j.util.tests.AbstractOMTest.run(AbstractOMTest.java:375)
at junit.framework.TestSuite.runTest(TestSuite.java:241)
at junit.framework.TestSuite.run(TestSuite.java:236)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:93)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Caused by: java.lang.NullPointerException
at java.base/java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
at org.eclipse.emf.internal.cdo.session.CDOLockStateCacheImpl.getSingleOwnerInfo(CDOLockStateCacheImpl.java:530)
at org.eclipse.emf.internal.cdo.session.CDOLockStateCacheImpl.access$4(CDOLockStateCacheImpl.java:528)
at org.eclipse.emf.internal.cdo.session.CDOLockStateCacheImpl$MultiOwnerInfo$ReadLock.removeReadLockOwner(CDOLockStateCacheImpl.java:1695)
at org.eclipse.emf.internal.cdo.session.CDOLockStateCacheImpl$OwnerInfo.applyDelta(CDOLockStateCacheImpl.java:858)
at org.eclipse.emf.internal.cdo.session.CDOLockStateCacheImpl.updateLockStates(CDOLockStateCacheImpl.java:257)
at org.eclipse.emf.internal.cdo.view.CDOViewImpl.updateLockStates(CDOViewImpl.java:522)
at org.eclipse.emf.internal.cdo.view.CDOViewImpl.unlockObjects(CDOViewImpl.java:690)
at org.eclipse.emf.internal.cdo.view.CDOViewImpl.unlockObjects(CDOViewImpl.java:611)
at org.eclipse.emf.internal.cdo.view.CDOViewImpl.unlockObjects(CDOViewImpl.java:602)
at org.eclipse.emf.cdo.tests.InitialTest.testConcurrentHashMapException(InitialTest.java:358)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at junit.framework.TestCase.runTest(TestCase.java:177)
at org.eclipse.net4j.util.tests.AbstractOMTest.access$0(AbstractOMTest.java:1)
at org.eclipse.net4j.util.tests.AbstractOMTest$3.execute(AbstractOMTest.java:315)
at org.eclipse.net4j.internal.util.test.TestExecuter.execute(TestExecuter.java:40)
at org.eclipse.net4j.util.tests.AbstractOMTest.runBare(AbstractOMTest.java:301)
at org.eclipse.emf.cdo.tests.config.impl.ConfigTest.runBare(ConfigTest.java:648)
... 14 more
It surprises me that the second unlock causes this NPE. Is this correct behavior?
Thank you,
Jay
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04395 seconds