Hi all,

I found an issue with concurrent access during work with H323Connection.
Take a look on H46018Transport::HandleH46018SignallingChannelPDU(PThread * thread)

Simplest schema of this function running:

thread1:
H46018Transport::HandleH46018SignallingChannelPDU(PThread * thread)
{
...
H323Connection * connection = endpoint.CreateConnection(callReference, NULL, this, &pdu);
...
connection->AttachSignalChannel(token, this, true); 
...
connection->HandleSignallingChannel();
...
return connection->HadAnsweredCall();
}

The function connection->HandleSignallingChannel() in really working with "this" (H46018Transport object) all time in the while-loop.

thread2:
H323EndPoint::CleanUpConnections() running. In this thread we are running:
1.connection.CleanUpOnCallEnd() - this function will call CleanUpOnTermination() for signallingChannel (H46018Transport object) which running in connection->HandleSignallingChannel() function.
2.delete current H323Connection (which will delete our signallingChannel object also)

The concurrent access issue - in time when we are running connection->HandleSignallingChannel() function from  thread1, the H323Connection object can be deleted and signallingChannel will points to dead object - we have a crash in result. Also it is possible to run the connection->HadAnsweredCall() function for dead "connection" object.

I have had the crash several times for this situation.


Thanks
--
Iurii Gordiienko