Deadlock at OMMConsumer

vikas.chaudhary
vikas.chaudhary Explorer
edited June 5 in EMA

There is deadlock at OMMConsumer while un-registering ric. Please advise.

Below are logs from application.   

at sun.misc.Unsafe.park(Native Method)

    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)

    at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)

    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)

    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)

    at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)

    at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)

    at com.refinitiv.ema.access.OmmBaseImpl.unregister(OmmBaseImpl.java:622)

    at com.refinitiv.ema.access.OmmConsumerImpl.unregister(OmmConsumerImpl.java:279)

Answers

  • Jirapongse
    Jirapongse ✭✭✭✭✭

    @vikas.chaudhary

    Thank you for reaching out to us.

    Typically, the deadlock happens with two threads and two resources. Please share the full call stack of all threads.

    Moreover, please check the version of EMA Java that you are using. The current version is RTSDK Java 2.3.0.L2 aka EMA/ETA 3.9.0.L2. You may check the CHANGELOG.md file for the deadlock issues fixed in the previous releases.

    You can download the lastest version of EMA Java from the Software Download. It is in the Product family: MDS API and Products: LSEG Real-Time SDK.

  • we are using ema-3.7.3.0.jar and eta-3.7.3.0.jar. I believe deadlock was fixed in earlier version :

    3.7.0.L1. Please advise.

    "RFA Dispatch Thread" Id=66 in WAITING on lock=java.util.concurrent.locks.ReentrantLock$NonfairSync@20159c5

         owned by pool-5-thread-773 Id=978

        at sun.misc.Unsafe.park(Native Method)

        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)

        at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)

        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)

        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)

        at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)

        at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)

        at ubs.shell.ema.EmaSubscriptionListenerCached.putRICToCache(EmaSubscriptionListenerCached.java:51)

        at ubs.shell.ema.EmaSubscriptionListenerCached.onMessage(EmaSubscriptionListenerCached.java:41)

        at ubs.shell.ema.EmaMessageHandler.onMessage(EmaMessageHandler.java:33)

        at ubs.shell.ema.EmaConnection.processEMAPublisherRefreshMessage(EmaConnection.java:664)

    Another Thread :

    "pool-5-thread-773" Id=978 in WAITING on lock=java.util.concurrent.locks.ReentrantLock$NonfairSync@cc6a7f5

         owned by RFA Dispatch Thread Id=66

        at sun.misc.Unsafe.park(Native Method)

        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)

        at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)

        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)

        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)

        at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)

        at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)

        at com.refinitiv.ema.access.OmmBaseImpl.unregister(OmmBaseImpl.java:622)

        at com.refinitiv.ema.access.OmmConsumerImpl.unregister(OmmConsumerImpl.java:279)

        at ubs.shell.ema.EmaConnection$EMAConsumerSubscriber.unsubscribe(EmaConnection.java:582)

  • Jirapongse
    Jirapongse ✭✭✭✭✭

    @vikas.chaudhary

    These should not be the full call stack.

    This one should be the application lock.

        at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)

    at ubs.shell.ema.EmaSubscriptionListenerCached.putRICToCache(EmaSubscriptionListenerCached.java:51)

    This one is the EMA lock.

        at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)

    at com.refinitiv.ema.access.OmmBaseImpl.unregister(OmmBaseImpl.java:622)

    It looks like to be a deadlock between the EMA Lock and application owned lock. I assume that this RFA Dispatch Thread owns the EMA lock while this pool-5-thread-773 thread owns the application lock.

    Please verify the application logic or contact the API support team directly via Contact Premium Support to investigate this issue on the API side.