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:
parent
fd6986168a
commit
c1c450e0f7
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue