Refinitiv / Real-Time-SDK

Other
191 stars 129 forks source link

EMA C++ : consumer hangs in OmmConsumerImpl::loadDictionary(), timeout does not work #288

Closed miczuc closed 1 month ago

miczuc commented 1 month ago

Hello.

When a consumer connects to a provider, which does not send a data dictionary, and is configured to use a "ChannelDictionary", the consumer hangs forever, regardless of the timeout set with configuration parameter "DictionaryRequestTimeOut". This can be reproduced e.g. by using the consumer from example Training/Consumer/100_Series/100_MP_Streaming and connecting it to "sink_driven_src".

Below are the call stacks of the threads in the consumer program, when it hangs. Obviously the main thread does not return from OmmConsumerImpl::loadDictionary ().

Thread 3 (Thread 0x7f53fc717700 (LWP 30961) "cons100.x-RWT.1"):

0 0x00007f53fe492a89 in poll () from /lib64/libc.so.6

1 0x00000000008e3174 in rsslNotifierWait (pNotifier=0x1c5efa0, timeoutUsec=5000000) at /local/jenkins/workspace/RTSDK_Core_DX1/OS/RH8-64/rcdev/source/rtsdk/Cpp-C/Eta/Impl/Util/rsslNotifier.c:284

2 0x000000000072df1d in runReactorWorker (pArg=0x1c50450) at /local/jenkins/workspace/RTSDK_Core_DX1/OS/RH8-64/rcdev/source/rtsdk/Cpp-C/Eta/Impl/Reactor/rsslReactorWorker.c:1205

3 0x00007f53fe5886ea in start_thread () from /lib64/libpthread.so.0

4 0x00007f53fe49f58f in clone () from /lib64/libc.so.6

Thread 2 (Thread 0x7f53fe318700 (LWP 30960) "cons100.x"):

0 0x00007f53fe58f70c in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0

1 0x000000000057a805 in refinitiv::ema::access::ConditionVariable::wait (this=0xeead60 <refinitiv::ema::access::OmmBaseImplMap::_condVariable>, mutex=...) at /local/jenkins/workspace/RTSDK_Core_DX1/OS/RH8-64/rcdev/source/rtsdk/Cpp-C/Ema/Src/Access/Impl/Mutex.cpp:69

2 0x00000000005ab905 in refinitiv::ema::access::OmmBaseImplMap::monitorThread (arg=0x0) at /local/jenkins/workspace/RTSDK_Core_DX1/OS/RH8-64/rcdev/source/rtsdk/Cpp-C/Ema/Src/Access/Impl/OmmBaseImplMap.h:224

3 0x00007f53fe5886ea in start_thread () from /lib64/libpthread.so.0

4 0x00007f53fe49f58f in clone () from /lib64/libc.so.6

Thread 1 (Thread 0x7f53fe386000 (LWP 30959) "cons100.x"):

0 0x00007f53fe492b96 in ppoll () from /lib64/libc.so.6

1 0x00000000005a418b in refinitiv::ema::access::OmmBaseImpl::rsslReactorDispatchLoop (this=0x1c64130, timeOutValue=-1, count=100, bMsgDispRcvd=@0x1c64bdf: false) at /local/jenkins/workspace/RTSDK_Core_DX1/OS/RH8-64/rcdev/source/rtsdk/Cpp-C/Ema/Src/Access/Impl/OmmBaseImpl.cpp:2938

2 0x0000000000419ed4 in refinitiv::ema::access::OmmConsumerImpl::loadDictionary (this=0x1c64130) at /local/jenkins/workspace/RTSDK_Core_DX1/OS/RH8-64/rcdev/source/rtsdk/Cpp-C/Ema/Src/Access/Impl/OmmConsumerImpl.cpp:228

3 0x00000000005a2ee7 in refinitiv::ema::access::OmmBaseImpl::initialize (this=0x1c64130, configImpl=0x1c44930) at /local/jenkins/workspace/RTSDK_Core_DX1/OS/RH8-64/rcdev/source/rtsdk/Cpp-C/Ema/Src/Access/Impl/OmmBaseImpl.cpp:2536

4 0x0000000000418a1f in refinitiv::ema::access::OmmConsumerImpl::OmmConsumerImpl (this=0x1c64130, config=...) at /local/jenkins/workspace/RTSDK_Core_DX1/OS/RH8-64/rcdev/source/rtsdk/Cpp-C/Ema/Src/Access/Impl/OmmConsumerImpl.cpp:27

5 0x000000000040f235 in refinitiv::ema::access::OmmConsumer::OmmConsumer (this=0x7ffd21f29780, config=...) at /local/jenkins/workspace/RTSDK_Core_DX1/OS/RH8-64/rcdev/source/rtsdk/Cpp-C/Ema/Src/Access/Impl/OmmConsumer.cpp:23

6 0x000000000040809b in main (argc=1, argv=0x7ffd21f299a8) at Cons_100_MP_Streaming/Consumer.cpp:32

ViktorYelizarov commented 1 month ago

@miczuc Thank you for bringing this issue to our attention! We created an internal Jira to investigate it.

vlevendel commented 1 month ago

@miczuc Would you please retry this with RTSDK-2.2.2.L1? Feel free to reopen if problem persists.

miczuc commented 1 month ago

Hi. I retried with version 2.2.2 . There the timeout works. Problem is solved.