Browse Source

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>
rtt
Marc Schink 7 years ago
parent
commit
afce40dd48
1 changed files with 17 additions and 0 deletions
  1. +17
    -0
      src/server/server.c

+ 17
- 0
src/server/server.c View File

@@ -351,6 +351,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;
@@ -359,6 +374,8 @@ static int remove_services(void)
while (c) {
struct service *next = c->next;

remove_connections(c);

if (c->name)
free(c->name);



Loading…
Cancel
Save