Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF » [CDO] ConcurrentHashMap NPE.(NPE when releasing a read lock.)
[CDO] ConcurrentHashMap NPE. [message #1857803] Sun, 26 February 2023 23:28 Go to next message
Jay Graham is currently offline Jay GrahamFriend
Messages: 13
Registered: September 2013
Junior Member
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
Re: [CDO] ConcurrentHashMap NPE. [message #1857813 is a reply to message #1857803] Mon, 27 February 2023 12:07 Go to previous messageGo to next message
Eike Stepper is currently offline Eike StepperFriend
Messages: 6682
Registered: July 2009
Senior Member
Hi Jay,

Thank you so much for your excellent test case! With it I can reproduce your issue and I already have an idea regarding the root cause. Can you be so kind a submit a bugzilla so that we can track the effort?


Re: [CDO] ConcurrentHashMap NPE. [message #1857815 is a reply to message #1857813] Mon, 27 February 2023 13:42 Go to previous messageGo to next message
Jay Graham is currently offline Jay GrahamFriend
Messages: 13
Registered: September 2013
Junior Member
Will do.
Re: [CDO] ConcurrentHashMap NPE. [message #1857816 is a reply to message #1857813] Mon, 27 February 2023 13:51 Go to previous message
Jay Graham is currently offline Jay GrahamFriend
Messages: 13
Registered: September 2013
Junior Member
Please see bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=581605

[Updated on: Tue, 28 February 2023 20:28]

Report message to a moderator

Previous Topic:[CDO] Database mapping: explicitly specify nullable columns
Next Topic:Location of Containment Proxy Objects
Goto Forum:
  


Current Time: Tue Apr 23 07:24:44 GMT 2024

Powered by FUDForum. Page generated in 0.03362 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top