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.