server/server: Remove all connections on shutdown

This patch fixes a memory leak in the internal server. Steps for
reproduction:

 * valgrind --leak-check=full --show-reachable=yes ./build/src/openocd
 * Establish more than one connection to OpenOCD (e.g. telnet)
 * Shutdown OpenOCD
 * Check for memory leaks in add_connection()

Change-Id: I0ae6fcf2918fd9bdec350446d3e26742d08ff698
Signed-off-by: Marc Schink <openocd-dev@marcschink.de>
Reviewed-on: http://openocd.zylin.com/4053
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
Marc Schink 2017-01-07 17:43:49 +01:00 committed by Tomas Vanek
parent fd6986168a
commit c1c450e0f7
1 changed files with 17 additions and 0 deletions

View File

@ -345,6 +345,21 @@ int add_service(char *name,
return ERROR_OK;
}
static void remove_connections(struct service *service)
{
struct connection *connection;
connection = service->connections;
while (connection) {
struct connection *tmp;
tmp = connection->next;
remove_connection(service, connection);
connection = tmp;
}
}
static int remove_services(void)
{
struct service *c = services;
@ -353,6 +368,8 @@ static int remove_services(void)
while (c) {
struct service *next = c->next;
remove_connections(c);
if (c->name)
free(c->name);