Segmentation fault in runReactorWorker
I've discovered a situation that causes my program to (sometimes) terminate with segment fault during the reconnection logic.
The code gets in the SEGV somewhere during the processing of runReactorWorker function, in the shared library: librsslVA.so
Since the library was shipped without debug symbols, I had to create my own version of the .so from the source included in the Impl directory in the distribution. (1.0.6)
The problem reproduces easily with the version compiled locally including debug symbols.
The problem shows up at line 614 of rsslReactorWorker.c
The line of source causing the problem is:
if (pReactorChannel->reactorChannel.pRsslChannel->socketId != REACTOR_INVALID_SOCKET)
When the problem occurs, pReactorChannel->reactorChannel.pRsslChannel is 0.
By looking at the logs in the Elektron Edge Device, I can see that the program was disconnected as a slow consumer (the output buffer had an overflow).
Elsewhere in the logic in RsslReactorWorker.c, when in the processing logic forRSSL_RC_CET_CHANNEL_DOWN_RECONNECTING, the following line appears:
pReactorChannel->reactorChannel.pRsslChannel = 0;
This is line 529, immediately following a call to close the channel.
That a SEGV does NOT occur every time a reconnect is processed indicates that there is some soft of timing issue here, that makes the error difficult to find.
The fix may be as simple as checking if pReactorChannel->reactorChannel.pRsslChannel is 0 before retrieving the socketId
(I've just had a look at the 1.0.7 version of the source to see if the problem is still present. In the newer version, the source the line of the SEGV is identical).
Answers
-
I can replicate the issue in our environment. Next, I will refer the case to the development team to verify the problem.
0 -
Any update here -- I see that version 1.0.7 is still the latest version.
0 -
I've found a second bug causing a crash on line 498 of the same routine.
I've temporarily fixed this by adding changing the logic to:
case RSSL_RC_CET_CHANNEL_DOWN:
{
/* Make sure descriptors are cleared */
if (pReactorChannel && pReactorChannel->reactorChannel.pRsslChannel &&
pReactorChannel->reactorChannel.pRsslChannel->socketId !=
REACTOR_INVALID_SOCKET)
{
FD_CLR(pReactorChannel->reactorChannel.pRsslChannel->socketId,
pReactorWorker->readFds);
FD_CLR(pReactorChannel->reactorChannel.pRsslChannel->socketId,
pReactorWorker->exceptFds);
FD_CLR(pReactorChannel->reactorChannel.pRsslChannel->socketId,
pReactorWorker->writeFds);
}
/* Remove channel from worker's list */
_reactorWorkerMoveChannel(&pReactorWorker->inactiveChannels,
pReactorChannel);
break;
}We cannot deploy our code to production with a patched 3rd party library.
We are awaiting your fixed version of the reactor0 -
Joe,
Can you please raise this case with TRDC
0 -
I believe it already has been, Case: 04986557
@tina.murthy
0 -
This issue has been fixed in ETA 3.1.0.L1 in the Elektron-SDK 1.1.0 package.
--------------------------------
You can download it from here.
eta3.1.0.L1.win.rrg
--------------------------------
…
[ETA-2613] - CaseId: 04986557 Reactor crashes when connection is down0
Categories
- All Categories
- 6 AHS
- 39 Alpha
- 161 App Studio
- 4 Block Chain
- 4 Bot Platform
- 16 Connected Risk APIs
- 47 Data Fusion
- 30 Data Model Discovery
- 608 Datastream
- 1.3K DSS
- 577 Eikon COM
- 4.9K Eikon Data APIs
- 7 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- Trading API
- 2.7K Elektron
- 1.3K EMA
- 236 ETA
- 519 WebSocket API
- 33 FX Venues
- 10 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 20 Messenger Bot
- 2 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 59 Open Calais
- 264 Open PermID
- 39 Entity Search
- 2 Org ID
- PAM
- PAM - Logging
- 8.4K Private Comments
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 20 RDMS
- 1.4K Refinitiv Data Platform
- 370 Refinitiv Data Platform Libraries
- 3 Refinitiv Due Diligence
- LSEG Due Diligence Portal API
- 3 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.1K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 10 World-Check Customer Risk Screener
- 990 World-Check One
- 44 World-Check One Zero Footprint
- 45 Side by Side Integration API
- Test Space
- 3 Thomson One Smart
- 1.2K TR Internal
- Global Hackathon 2015
- 2 Specialists Who Code
- 10 TR Knowledge Graph
- 150 Transactions
- 142 REDI API
- 1.7K TREP APIs
- 4 CAT
- 21 DACS Station
- 117 Open DACS
- 1.1K RFA
- 103 UPA
- 172 TREP Infrastructure
- 224 TRKD
- 886 TRTH
- 5 Velocity Analytics
- 5 Wealth Management Web Services
- 60 Workspace SDK
- 9 Element Framework
- 5 Grid
- 13 World-Check Data File
- Yield Book Analytics
- 46 中文论坛