From 6f376620d30bdfdbe3b9ae4989e8b1cb8e766be8 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Mon, 27 Sep 2021 17:12:18 +0200 Subject: [PATCH] - fixed bug in IsoServer that caused memory violation when the server was restarted while a client was connected --- src/mms/iso_server/iso_server.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/mms/iso_server/iso_server.c b/src/mms/iso_server/iso_server.c index 8501e41b..8fa498b4 100644 --- a/src/mms/iso_server/iso_server.c +++ b/src/mms/iso_server/iso_server.c @@ -309,6 +309,7 @@ closeAllOpenClientConnections(IsoServer self) if (self->openClientConnections[i] != NULL) { IsoConnection_close(self->openClientConnections[i]); IsoConnection_destroy(self->openClientConnections[i]); + self->openClientConnections[i] = NULL; } } #endif /* (CONFIG_MAXIMUM_TCP_CLIENT_CONNECTIONS == -1) */ @@ -427,7 +428,9 @@ setupIsoServer(IsoServer self) goto exit_function; } - self->handleset = Handleset_new(); + if (self->handleset == NULL) + self->handleset = Handleset_new(); + Handleset_addSocket(self->handleset, self->serverSocket); #if (CONFIG_ACTIVATE_TCP_KEEPALIVE == 1) @@ -748,6 +751,11 @@ IsoServer_stopListeningThreadless(IsoServer self) closeAllOpenClientConnections(self); + if (self->handleset) { + Handleset_destroy(self->handleset); + self->handleset = NULL; + } + if (DEBUG_ISO_SERVER) printf("ISO_SERVER: IsoServer_stopListeningThreadless finished!\n"); } @@ -772,6 +780,11 @@ IsoServer_stopListening(IsoServer self) while (private_IsoServer_getConnectionCounter(self) > 0) Thread_sleep(10); + if (self->handleset) { + Handleset_destroy(self->handleset); + self->handleset = NULL; + } + if (DEBUG_ISO_SERVER) printf("ISO_SERVER: IsoServer_stopListening finished!\n"); }