- fixed memory leak in reuse of client connection (related to socket extension buffer)

pull/396/head
Michael Zillgith 3 years ago
parent 25bcd14618
commit 10a4bc6e76

@ -193,48 +193,63 @@ IsoClientConnection_create(IsoConnectionParameters parameters, IsoIndicationCall
static bool static bool
sendConnectionRequestMessage(IsoClientConnection self) sendConnectionRequestMessage(IsoClientConnection self)
{ {
int socketExtensionBufferSize = CONFIG_MMS_MAXIMUM_PDU_SIZE + 1000;
uint8_t* socketExtensionBuffer = NULL;
if (self->cotpConnection) { if (self->cotpConnection) {
/* Destroy existing handle set when connection is reused */ /* Destroy existing handle set when connection is reused */
if (self->cotpConnection->handleSet) if (self->cotpConnection->handleSet)
Handleset_destroy(self->cotpConnection->handleSet); Handleset_destroy(self->cotpConnection->handleSet);
self->cotpConnection->handleSet = NULL; self->cotpConnection->handleSet = NULL;
socketExtensionBuffer = self->cotpConnection->socketExtensionBuffer;
} }
int socketExtensionBufferSize = CONFIG_MMS_MAXIMUM_PDU_SIZE + 1000; if (socketExtensionBuffer == NULL) {
uint8_t* socketExtensionBuffer = (uint8_t*)GLOBAL_MALLOC(socketExtensionBufferSize); socketExtensionBuffer = (uint8_t*)GLOBAL_MALLOC(socketExtensionBufferSize);
}
/* COTP (ISO transport) handshake */ if (socketExtensionBuffer) {
CotpConnection_init(self->cotpConnection, self->socket, self->receiveBuffer, self->cotpReadBuffer, self->cotpWriteBuffer,
socketExtensionBuffer, socketExtensionBufferSize); /* COTP (ISO transport) handshake */
CotpConnection_init(self->cotpConnection, self->socket, self->receiveBuffer, self->cotpReadBuffer, self->cotpWriteBuffer,
socketExtensionBuffer, socketExtensionBufferSize);
#if (CONFIG_MMS_SUPPORT_TLS == 1) #if (CONFIG_MMS_SUPPORT_TLS == 1)
if (self->parameters->tlsConfiguration) { if (self->parameters->tlsConfiguration) {
TLSConfiguration_setClientMode(self->parameters->tlsConfiguration); TLSConfiguration_setClientMode(self->parameters->tlsConfiguration);
/* create TLSSocket and start TLS authentication */ /* create TLSSocket and start TLS authentication */
TLSSocket tlsSocket = TLSSocket_create(self->socket, self->parameters->tlsConfiguration, false); TLSSocket tlsSocket = TLSSocket_create(self->socket, self->parameters->tlsConfiguration, false);
if (tlsSocket) if (tlsSocket)
self->cotpConnection->tlsSocket = tlsSocket; self->cotpConnection->tlsSocket = tlsSocket;
else { else {
if (DEBUG_ISO_CLIENT) if (DEBUG_ISO_CLIENT)
printf("ISO_CLIENT: TLS handshake failed!\n"); printf("ISO_CLIENT: TLS handshake failed!\n");
return false; return false;
}
} }
}
#endif /* (CONFIG_MMS_SUPPORT_TLS == 1) */ #endif /* (CONFIG_MMS_SUPPORT_TLS == 1) */
/* COTP (ISO transport) handshake */ /* COTP (ISO transport) handshake */
CotpIndication cotpIndication = CotpIndication cotpIndication =
CotpConnection_sendConnectionRequestMessage(self->cotpConnection, self->parameters); CotpConnection_sendConnectionRequestMessage(self->cotpConnection, self->parameters);
if (cotpIndication != COTP_OK)
return false;
else
return true;
}
else {
if (DEBUG_ISO_CLIENT)
printf("ISO_CLIENT: Failed to allocate socket extension buffer\n");
if (cotpIndication != COTP_OK)
return false; return false;
else }
return true;
} }
static void static void
@ -755,7 +770,6 @@ IsoClientConnection_close(IsoClientConnection self)
} }
} }
void void
IsoClientConnection_destroy(IsoClientConnection self) IsoClientConnection_destroy(IsoClientConnection self)
{ {

Loading…
Cancel
Save