My consumer application bases on Consumer example in RFA package. Last week, it crashed with the following call stack.
rfa::common::RFA_String::set(char const*, unsigned int, bool) () rfa::common::RFA_String::RFA_String(rfa::common::RFA_String const&, rfa::common::RFA_String const&) () rfa::common::operator+(rfa::common::RFA_String const&, rfa::common::RFA_String const&) () MarketPriceClient::displayServiceAndItemName (this=…, respMsg=..., cacheItem=..., temp=...) MarketPriceClient::processRefreshRespMsg (this=…, respMsg=..., cacheItem=..., temp=...) MarketPriceClient::processEvent (this=…, event=...) rfa::common::EventQueueImpl::dispatch(long)
From the code, it crashed at this line.
void MarketPriceClient::displayServiceAndItemName( const RespMsg& respMsg, ConsumerItem& cacheItem, RFA_String& temp ) { ... temp += cacheItem.getName() + RFA_String( " :\n", 0, false ); }
It seems that cacheItem is invalid. The application log before crash was:
11:32:30 RDMConsumerClient : Status Msg : ELEKTRON_EDGE – TRI.N : Status : DataState : Suspect StreamState : Open StatusCode : None StatusText : Item is stale 11:33:40 RDMConsumerClient: Received Final Stream State : 'Closed' for MarketPrice item: 'TRI.N' RDMConsumerClient : Status Msg : ELEKTRON_EDGE - TRI.N:
However, another instance of the application running on a different machine didn’t crash. Both applications connected to the same server. The log of this application at that time was:
11:32:30 RDMConsumerClient : Status Msg : ELEKTRON_EDGE - TRI.N : Status : DataState : Suspect StreamState : Open StatusCode : None StatusText : Item is stale 11:33:40 RDMConsumerClient : Status Msg : ELEKTRON_EDGE - TRI.N: 11:55:35 RDMConsumerClient: Received Final Stream State : 'Closed' for MarketPrice item: 'TRI.N' RDMConsumerClient : Status Msg : ELEKTRON_EDGE - TRI.N: Status : DataState : Suspect StreamState : Closed StatusCode : None StatusText : Record dropped from network
Please let me know the cause of this issue and how to fix this problem.