updateNamesapceIndexes function throws exception

Questions regarding the use of the C++ SDK for Server or Client development or integration into customer products ...

Moderator: uasdkcpp

Post Reply
trandana
Full Member
Full Member
Posts: 6
Joined: 10 Jul 2019, 17:27

updateNamesapceIndexes function throws exception

Post by trandana »

In the Client SDK, the updateNamespaceIndexes function occasionally throws an exception during reconnections:

Code: Select all

UaStatus Configuration::updateNamespaceIndexes(const UaStringArray& namespaceArray)
{
	UaStatus result;
	OpcUa_UInt32 i, j;
	OpcUa_UInt32 size;
	// create mapping table
	size = m_namespaceArray.length();
	UaInt16Array mappingTable;
	mappingTable.resize(size);
	// fill mapping table
	for (i = 0; i < m_namespaceArray.length(); i++)
	{
		mappingTable[i] = (OpcUa_UInt16)i;
		// find namespace uri
		for (j = 0; j < namespaceArray.length(); j++)
		{
			UaString string1(m_namespaceArray[i]);
			UaString string2(namespaceArray[j]);
			if (string1 == string2)
			{
				mappingTable[i] = (OpcUa_UInt16)j;
				break;
			}
		}
	}
	// NodesToRead
	for (i = 0; i < m_nodesToRead.length(); i++)
	{
		m_nodesToRead[i].NamespaceIndex = mappingTable[m_nodesToRead[i].NamespaceIndex];
	}
	//Node to write
	for (i = 0; i < m_nodesToWrite.length(); i++)
	{
		m_nodesToWrite[i].NamespaceIndex = mappingTable[m_nodesToWrite[i].NamespaceIndex];
	}
	// NodesToMonitor
	for (i = 0; i < m_nodesToMonitor.length(); i++)
	{
		m_nodesToMonitor[i].NamespaceIndex = mappingTable[m_nodesToMonitor[i].NamespaceIndex];
	}
	// update namespace array
	m_namespaceArray = namespaceArray;
	return result;
}
The exception is caused during:

Code: Select all

m_nodesToRead[i].NamespaceIndex = mappingTable[m_nodesToRead[i].NamespaceIndex];
Call stack:

Code: Select all

 UA_Client_SDK.exe!UaInt16Array::operator[](unsigned long index) Line 8439	C++
	UA_Client_SDK.exe!Configuration::updateNamespaceIndexes(const UaStringArray & namespaceArray) Line 315	C++
 	UA_Client_SDK.exe!SampleClient::connectionStatusChanged(unsigned long clientConnectionId, UaClientSdk::UaClient::ServerStatus serverStatus) Line 90	C++
 	UA_Client_SDK.exe!UaClientSdk::UaSessionPrivate::doTryReconnect() Line 10810	C++
 	UA_Client_SDK.exe!UaClientSdk::UaSessionPrivate::run() Line 9381	C++
 	UA_Client_SDK.exe!UaThread::ThreadMain() Line 136	C++

Does anyone know why this occurs?

Post Reply