Refinitiv / Real-Time-SDK

Other
191 stars 129 forks source link

Received a message from a reactor channel after channel close #271

Closed andysCaplin closed 6 months ago

andysCaplin commented 9 months ago

Binary info

Application: ETA consumer application Library version: ETA PACKAGE eta3.7.3.E1 rrg VERSION eta3.7.3.1 Tue Feb 20 21:30:28 CST 2024

Issue

I run my application under valgrind to detect any memory issues.

When I do this I sometimes get an error handling an update and I close the channel using rsslReactorCloseChannel(). I also remove the read events and except events for the channel.

However after I close the channel and before I try to reconnect I sometimes get a defaultMsgCallback() on that channel. I would have expected that if a channel is closed I would never get a message from that channel again until I reconnect it.

This is all happening on the same thread, i.e. the channel close and the subsequent message callback.

This only ever happens under valgrind.

L-Karchevska commented 9 months ago

@andysCaplin Thank you for letting us know about this issue, we will look into it.

andysCaplin commented 7 months ago

This has now happened to a customer in production who was not running under valgrind.

vlevendel commented 7 months ago

@andysCaplin awaiting details from you via email to investigate further.

andysCaplin commented 7 months ago

The channel life-cycle information is below.

The application is calling channel close in the callback. It's always done that and there has been no problem but I can see how it could cause an issue. I'll raise a upasrc issue to change this.

This may be the cause of all the symptoms - i.e. upasrc calling the channel close API in the callback.

2024/04/06-14:05:51.448610 +0000: (upasrc-load-1): INFO: [RTO]: ETA Reactor: Login status code <State: Closed/Suspect/Not entitled - text: "Force Logout from DACS.">, user name <> client id <GE-WFZQ23
YKLIWE>
2024/04/06-14:05:51.448629 +0000: (upasrc-load-1): INFO: ETA: Application closing channel (0x7f3b74183910), reason - Login stream not open
2024/04/06-14:05:51.448675 +0000: (upasrc-load-1): INFO: Channel resubscribe: Queuing 2944 subscribe event(s) for channel
2024/04/06-14:05:51.511432 +0000: (upasrc-load-1): INFO: ETA: Name: RWFFld,Domain: RSSL_DMT_DICTIONARY, stream: [00003] Msg Class: RDM_DC_MT_STATUS, <State: Closed/Suspect/None - text: "Login stream was closed.">
2024/04/06-14:05:51.511447 +0000: (upasrc-load-1): INFO: ETA: Name: RWFEnum,Domain: RSSL_DMT_DICTIONARY, stream: [00004] Msg Class: RDM_DC_MT_STATUS, <State: Closed/Suspect/None - text: "Login stream was closed.">
2024/04/06-14:05:51.511459 +0000: (upasrc-load-1): ERROR: ETA Reactor: defaultMsgCallback: Ignoring message received after channel 0x7f3b74183910 was closed, thr 0x427d550 message 0x7f3cf2a78960
...
...
andysCaplin commented 6 months ago

I cannot reproduce this on-site.

However it has been noticed by our customer when using our consumer application.

I think the reason I cannot reproduce is that I only have access to a limited number of instruments on RTO. The customer has access to 1000's of RIC's across 5 channels.

vlevendel commented 6 months ago

I’ll close this issue. It can be reopened if you are able to reproduce it.